假设我有一个 Boost.Phoenix lambda 表达式,如下所示:
_1 * 4.5 + (3.0 / _2)
有没有一种好方法可以在编译时检测 lambda 表达式是否有效,给定与 arguments 相关的类型列表_1
,_2
等等?我在想我想用它enable_if
来确定 lambda 是否支持输入类型。如果是这样,将直接调用 lambda,而如果不是,我想生成一个无操作。伪代码将是这样的:
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 需要它)。