>  기사  >  백엔드 개발  >  Variadic 템플릿 클래스에서 함수 포인터의 인수 유형을 검색하는 방법은 무엇입니까?

Variadic 템플릿 클래스에서 함수 포인터의 인수 유형을 검색하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-31 08:19:30838검색

 How to Retrieve Argument Types of a Function Pointer in a Variadic Template Class?

가변 템플릿 클래스에서 함수 포인터의 인수 유형 검색

이전 호에서는 함수를 처리하기 위해 일반 functor 클래스가 생성되었습니다. 임의의 인수 목록을 사용합니다. 당면한 문제는 이 클래스의 생성자 내에서 함수 포인터의 인수 유형에 액세스하는 것과 관련됩니다.

이 문제를 해결하려면 function_traits 클래스 템플릿을 활용할 수 있습니다.

<code class="cpp">template<typename T>
struct function_traits;

template<typename R, typename ...Args>
struct function_traits<std::function<R(Args...)>>
{
    static const size_t nargs = sizeof...(Args);

    typedef R result_type;

    template <size_t i>
    struct arg
    {
        typedef typename std::tuple_element<i, std::tuple<Args...>>::type type;
    };
};</code>

이 클래스 다음 기능을 제공합니다:

  • 인수 개수 추출: nargs 상수는 함수가 사용하는 인수 개수를 나타냅니다.
  • 반환 유형: result_type typedef는 반환 유형을 식별합니다.
  • 개별 인수 유형 결정: 인수 템플릿 구조체는 각 인수의 특정 유형을 제공합니다.

예:

<code class="cpp">struct R{};
struct A{};
struct B{};

typedef std::function<R(A,B)> fun;

std::cout << std::is_same<R, function_traits<fun>::result_type>::value << std::endl;
std::cout << std::is_same<A, function_traits<fun>::arg<0>::type>::value << std::endl;
std::cout << std::is_same<B, function_traits<fun>::arg<1>::type>::value << std::endl;</code>

출력:

1
1
1

이 예에서는 가변 템플릿 클래스의 생성자 내에서 인수 유형을 검색하기 위해 function_traits를 활용하는 방법을 보여줍니다.

위 내용은 Variadic 템플릿 클래스에서 함수 포인터의 인수 유형을 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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