作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个逻辑表达式,比方说 !a & b
。但是,我不想评估这个表达式,而是想构建一个功能树并将评估推迟到以后。a
和 b
的值是使用函数 value
计算的,所以我们有:
auto value_of_a = std::bind(value, _1); //I need an additional argument
auto value_of_b = std::bind(value, _1);
我想使用 logical_not
和 logical_and
而不是使用我自己的 lambda。但是,他们对参数调用直接运算符(例如 !arg
用于 logical_not
)。因此我不能使用类似的东西:
auto v = std::bind(logical_not, value_of_a); //And we still need the first argument
//to call value_of_a
我可以绑定(bind)结果(比如某种 Future)而不是函数吗?
为了可读性,我尝试使用尽可能多的已经定义的函数。我使用的是 C++14,但它们是在 C++11 中定义的。
我知道使用 lambda 可能是最简单的方法,但我正在尝试尽可能多地利用现有的东西。但是,如果解决方案不是真的更好,我会求助于他们。
谢谢,希望它足够清楚。
最佳答案
std::bind(std::logical_and<>{},
std::bind(std::logical_not<>{}, value_of_a),
std::bind(value_of_b, std::placeholders::_2));
假设value_of_a
是一个绑定(bind)表达式,上面的代码等价于:
( not value_of_a(#1) ) and ( value_of_b(#2) )
关于C++14 函数式 logical_not 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39077545/
我有一个逻辑表达式,比方说 !a & b。但是,我不想评估这个表达式,而是想构建一个功能树并将评估推迟到以后。a 和 b 的值是使用函数 value 计算的,所以我们有: auto value_of_
请举例说明何时使用 std::logical_not 以及何时使用 std::not1! 根据文档,前者是“一元函数对象类”,而后者是“构造一元函数对象”。所以最终两者都构造了一个一元函数对象,不是吗
我是一名优秀的程序员,十分优秀!