ラムダを考えると、それがパラメーターの型と戻り値の型を理解することは可能ですか?はいの場合、どのように?
基本的に、私はlambda_traits
これを以下の方法で使用できるようにしたい:
auto lambda = [](int i) { return long(i*10); };
lambda_traits<decltype(lambda)>::param_type i; //i should be int
lambda_traits<decltype(lambda)>::return_type l; //l should be long
背後にある動機は、lambda_traits
引数としてラムダを受け入れる関数テンプレートで使用したいことであり、関数内のパラメーターの型と戻りの型を知る必要があります。
template<typename TLambda>
void f(TLambda lambda)
{
typedef typename lambda_traits<TLambda>::param_type P;
typedef typename lambda_traits<TLambda>::return_type R;
std::function<R(P)> fun = lambda; //I want to do this!
//...
}
とりあえず、ラムダは引数を1つだけ取ると想定できます。
最初に、私は次のように作業しようとしstd::function
ました:
template<typename T>
A<T> f(std::function<bool(T)> fun)
{
return A<T>(fun);
}
f([](int){return true;}); //error
ただし、明らかにエラーが発生します。だから私はそれをTLambda
関数テンプレートのバージョンに変更しstd::function
、(上記のように)関数内にオブジェクトを構築したいと思います。