ホームページ >バックエンド開発 >C++ >C Lambda 関数のパラメータと戻り値の型を決定するにはどうすればよいですか?

C Lambda 関数のパラメータと戻り値の型を決定するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-25 14:50:10624ブラウズ

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;
}

この実装では、

注目すべき制限

この手法は、[](auto x) {} のような汎用ラムダでは効果がないことに注意することが重要です。

以上がC Lambda 関数のパラメータと戻り値の型を決定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。