Variadic 템플릿 클래스에서 함수 포인터 인수 유형 액세스
이 문제는 임의 인수가 있는 함수에 대한 일반 펑터 생성에 관한 이전 쿼리에서 발생합니다. 기울기. 주어진 functor 클래스인 Foo를 사용하면 원하는 수의 인수로 함수 포인터를 호출할 수 있습니다. 그러나 이제 작업은 Foo 생성자 내의 함수 포인터에서 인수 유형을 추출하는 것입니다.
Foo 클래스를 정의할 때 인수 유형은 생성자의 함수 포인터 선언에서 ARGS...로 캡슐화됩니다. 생성 시 인수 값을 사용할 수 없지만 해당 유형은 함수 포인터 자체 내에서 액세스할 수 있습니다.
이러한 인수 유형을 확인하려면 function_traits 클래스를 활용할 수 있습니다.
<code class="cpp">template<typename T> struct function_traits; template<typename R, typename ...Args> struct function_traits<std::function<R(Args...)>> { // Number of arguments static const size_t nargs = sizeof...(Args); // Return type typedef R result_type; // Argument types at specified index template <size_t i> struct arg { typedef typename std::tuple_element<i, std::tuple<Args...>>::type type; }; };</code>
Foo 생성자를 사용하면 다음과 같이 function_traits를 사용하여 이러한 인수 유형에 액세스할 수 있습니다.
<code class="cpp">template<typename... ARGS> class Foo { ... Foo(std::function<void(ARGS...)> f) : m_f(f) { // Accessing the argument types static_assert(function_traits<std::function<void(ARGS...)>::nargs == sizeof...(ARGS), "Incorrect number of arguments"); ... } ... };</code>
function_traits를 사용하면 Foo 클래스 내에서 인수 유형을 추출하고 활용할 수 있으므로 함수 시그니처를 기반으로 하는 정교한 작업이 가능해집니다.
위 내용은 가변 템플릿 클래스 내에서 함수 포인터의 인수 유형에 어떻게 액세스할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!