在编译时,我能告诉Boost.Fenix lambda的一组特定输入类型是否有效吗
Can I tell at compile time whether a specific set of input types to a Boost.Phoenix lambda is valid?
假设我有一个Boost.Fenix lambda表达式,如下所示:
_1 * 4.5 + (3.0 / _2)
给定与参数_1
、_2
等相关的类型列表,是否有一种好的方法可以在编译时检测lambda表达式是否有效?我想使用enable_if
来确定lambda是否支持输入类型。如果是这样,lambda将被直接调用,而如果不是,我想生成一个no-op。伪代码是这样的:
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需要它)。
我认为这在菲尼克斯是不可能的。为了支持这种使用,enable_if
必须用于Phoenix在eval调用链中进行的几乎每一个函数调用,在各个级别,甚至在Phoenix所依赖的其他库中,并且它们所依赖的所有库都是用纯C++11重写的。即便如此,所有潜在的错误都会出现在SFINAE内容中,这也需要非常小心。
对不起,我只是没想到会发生这种事。
相关文章:
- 在 c++ 中拥有一组结构的正确方法是什么?
- 检查TCHAR数组输入是否为带符号整数C++
- 有哪些有效的方法可以消除一组 100 万个字符串>重复数据?
- 程序以使用 C++ 中的 while 循环查找一组数字的最小值
- 一组值的零开销下标运算符
- 使用一组结构,避免在一组结构中出现重复的结构
- CMake:我们可以为一组不形成可执行文件或库的特定文件指定包含目录吗?
- 合并一组模板专用化
- 如何更好地检查两个 char 变量是否在一组值中?
- C++有没有办法强制重写一组方法,如果其中一个方法在子类中具有重写?
- 读取一组用户输入,按升序排序,然后打印结果
- 要求用户一次输入 1 个 2D 数组的值
- 重复一组输入,存储并跟踪每个输入.C++
- C++,要求用户输入一组数字求和(未知的输入数量),但是数字不会加起来
- Boost程序选项允许一组输入值
- 如何让数组在下一次输入之前显示数组内容的前一个列表?
- 我正在尝试比较来自两个输入文件的数据,以查看一组是否比另一组少
- 如何在C中获得一组带有空格的单词作为一个输入
- 在编译时,我能告诉Boost.Fenix lambda的一组特定输入类型是否有效吗
- 我如何在使用SDL2获取一组所有输入后显示精灵的运动?