次のような Boost.Phoenix ラムダ式があるとします。
_1 * 4.5 + (3.0 / _2)
_1
引数、などに関連付けられた型のリストを指定して、コンパイル時にラムダ式が有効かどうかを検出する良い方法はあります_2
か? enable_if
入力型がラムダでサポートされているかどうかを判断するために使用したいと考えています。もしそうなら、ラムダは直接呼び出されますが、そうでなければ、ノーオペレーションを生成したいと思います。擬似コードは次のようになります。
template <typename F, typename A1, typename A2>
enable_if<F::is_supported<A1, A2>, result_of<F(A1,A2)>::type >::type func(F func, A1 arg1, A2 arg2)
{
func(A1, A2);
}
template <typename F, typename A1, typename A2>
disable_if<F::is_supported<A1, A2> >::type func(F func, A1 arg1, A2 arg2)
{
}
is_supported
どのように実装されるのか、それが可能かどうかさえわかりません。私は C++11 を使用していません。私は C++03 のみを想定しています (Phoenix が必要とするため)。