我正在尝试使用lambda进行三元运算符。以下是我想要投入三元运算的逻辑
if (boolean_condition_var == false) {
RandomMethod();
}
// From here some logic to execute
int i = 0;
// blah blah logic
以下是我在阅读this链接后尝试使其工作的方式。
boolean_condition_var == false ? RandomMethod() : std::function<void(void)>([this](){
// execute some logic here
int i = 0;
//blah blah logic
});
但是我收到以下错误:
问题:
error: left operand to ? is void, but right operand is of type 'std::function<void ()>'
boolean_condition_var == false ? RandomMethod() : std::function<void(void)>([this](){ int i = 0; });
问题:
如何将lambda传递给我的三元运算符的第二个子句?
答案 0 :(得分:1)
如何将lambda传递给我的三元运算符的第二个子句?
使用逗号运算符?
boolean_condition_var == false
? (RandomMethod(), 0)
: (std::function<void(void)>([this](){ /*...*/ })(), 0);
或者,我想更好,
std::function<void(void)> logicElse { [this](){ /*...*/ } };
boolean_condition_var == false
? (RandomMethod(), 0)
: (logicElse(), 0);
答案 1 :(得分:1)
由于您没有调用lambda,因此创建它没有多大意义。你要做的是等同于
boolean_condition_var ? void(0) : RandomMethod();
另一方面,如果要调用lambda,请使用call运算符:
boolean_condition_var? ([this](){...your code...}) ( ) : RandomMethod();
// ^
// |
//--------------------------------------------------+
没有必要向std::function
施放任何内容。
这里会更欢迎一个简单的if-then-else声明。
第三方面,如果你希望你的三元运算符返回一个可调用的,你可能需要像
这样的东西 using voidf = std::function<void(void)>;
auto result = boolean_condition_var?
voidf([this](){...your code...}):
voidf([this](){RandomNethod();});
.... result();
按值捕获boolean_condition_var
并将条件移动到(现在单个)lambda中可能更具可读性和效率。