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 サイトの他の関連記事を参照してください。