>백엔드 개발 >C++ >가변 템플릿 클래스 내에서 함수 포인터의 인수 유형에 어떻게 액세스할 수 있나요?

가변 템플릿 클래스 내에서 함수 포인터의 인수 유형에 어떻게 액세스할 수 있나요?

Barbara Streisand
Barbara Streisand원래의
2024-11-01 05:29:27657검색

How can I access the argument types of a function pointer within a variadic template class?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.