"written out" 等价于三元赋值是什么?

what is the "written out" equivalent of a ternary assignment?

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

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();
    }
}

三元赋值的“写出”等价物是什么? 我的想法很简单,三元组是我眼中的刺。我想尽可能保持 clean/readable。

添加工厂功能可以帮助您解决这个问题。使用

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

让您拥有像

这样的代码
foo f = make_foo(test);