>백엔드 개발 >C++ >C Lambda 함수의 매개변수와 반환 유형을 어떻게 결정할 수 있습니까?

C Lambda 함수의 매개변수와 반환 유형을 어떻게 결정할 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-25 14:50:10580검색

How Can We Determine the Parameter and Return Types of a C   Lambda Function?

람다의 매개변수와 반환 유형 찾기

질문

C에서 람다 함수의 매개변수와 반환 유형을 결정할 수 있나요? 그렇다면 어떻게?

이 문의는 람다를 인수로 사용하는 함수 템플릿 내의 유형을 알아야 하기 때문에 발생합니다.

답변

해결책은 다음과 같습니다. 다음 코드에서 볼 수 있듯이 function_traits를 사용할 때:

template <typename T>
struct function_traits : public function_traits<decltype(&T::operator())> {};

template <typename ClassType, typename ReturnType, typename... Args>
struct function_traits<ReturnType(ClassType::*)(Args...) const>
{
    enum { arity = sizeof...(Args) };
    typedef ReturnType result_type;

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

// Example usage
int main()
{
    auto lambda = [](int i) { return long(i * 10); };

    typedef function_traits<decltype(lambda)> traits;

    static_assert(std::is_same<long, traits::result_type>::value, "err");
    static_assert(std::is_same<int, traits::arg<0>::type>::value, "err");

    return 0;
}

이 구현은 람다의 decltype을 활용합니다. 연산자()를 사용하여 매개변수 유형을 파생시킵니다.

주목할 만한 제한

이 기술은 [](auto x) {}와 같은 일반 람다에는 효과가 없다는 점에 유의하는 것이 중요합니다.

위 내용은 C Lambda 함수의 매개변수와 반환 유형을 어떻게 결정할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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