C++14 函数式 logical_not 函数

标签 c++ c++11 c++14

我有一个逻辑表达式,比方说 !a & b。 但是,我不想评估这个表达式,而是想构建一个功能树并将评估推迟到以后。 ab 的值是使用函数 value 计算的,所以我们有:

auto value_of_a = std::bind(value, _1); //I need an additional argument
auto value_of_b = std::bind(value, _1);

我想使用 logical_notlogical_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) )

DEMO

关于C++14 函数式 logical_not 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39077545/

相关文章:

c++ - 使用spirit x3 解析字符串列表,后跟字符串列表

c++ - 抗锯齿像素渲染

c++ - 下划线、名称和文字运算符

c++ - 将 std::function 作为参数传递给 for_each

C++11 非模板化基类中的纯虚拟 'templated' 返回类型

c++ - 成员属性作为方法的默认值

c++ - 如何在可变参数模板之前推导模板

c++ - 仅对定义了功能的类型在功能模板内执行功能

c++ - 3 级复杂 BLAS 函数抛出非法值错误

c++ - std::out_of_range 捕获异常时?