【问题标题】:what is the "written out" equivalent of a ternary assignment?什么是三元作业的“写出”等价物?
【发布时间】:2021-12-28 14:07:20
【问题描述】:

我有一个 non-default-constructibe 结构。
我想根据条件为该结构的对象分配不同的值。 由于该结构是非默认构造的,因此无法声明它的单元化对象。 但是,可以使用三元来做到这一点:

struct foo {
    foo(int a);
};

foo generateFoo1() {
    return foo(1);
}

foo generateFoo2() {
    return foo(2);
}

int main() {
    bool test = false;

    //compiles fine
    foo f = test ? generateFoo1() : generateFoo2();

    //the following does not compile
    foo f2;
    if(test) {
        f2 = generateFoo1();
    }else {
        f2 = generateFoo2();
    }
}

三元赋值的“写出”等价物是什么? 我的想法很简单,三元是我眼中的刺。我想让它尽可能干净/可读。

【问题讨论】:

  • foo f = [=]{ if (test) return generateFoo1(); return generateFoo2(); }();
  • 您可以使用 lambda 函数作为近似值,但它不会比条件运算符更简洁。
  • 条件运算符干净/可读的选项。
  • 如果可读性是目标,那么只需将三元格式格式化为多行。

标签: c++ variable-assignment conditional-operator


【解决方案1】:

添加工厂功能可以帮助您。使用

foo make_foo(bool test)
{
    if (test)
        return generateFoo1();
    else
        return generateFoo2();
}

让你有类似的代码

foo f = make_foo(test);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-31
    • 2020-10-16
    • 2014-05-08
    • 2014-06-12
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 2011-02-09
    相关资源
    最近更新 更多