gpt4 book ai didi

c++ - 如何有条件地实例化一个对象?

转载 作者:行者123 更新时间:2023-12-01 14:08:50 24 4
gpt4 key购买 nike

我正在尝试做一些有条件的工作:

Type object;
if (cond) {
doSomeStuff();
object = getObject();
doMoreStuff();
} else {
doSomeOtherStuff();
object = getDifferentObject();
doEvenMoreStuff();
}
use(object);
我能想到解决这个问题的唯一方法是复制 use代码(实际上是我的应用程序中的内联代码)并声明 objectif的每个分支堵塞。如果我想避免重复代码,我必须将它包装在一些 use 函数中,就像上面一样。在真实情况下,这个 use函数可能需要 5 个以上的参数来基本上继承上下文。这一切看起来很困惑,无法维护。
if (cond) {
doSomeStuff();
Type object = getObject();
doMoreStuff();
use(object);
} else {
doSomeOtherStuff();
Type object = getDifferentObject();
doEvenMoreStuff();
use(object);
}
解决这个问题的最佳方法是什么? Type没有默认构造函数,因此片段 1 无法编译。
其他一些语言支持片段 1 - 相关问题: Forcing uninitialised declaration of member with a default constructor

最佳答案

您可以使用 IIILE(立即调用初始化 lambda 表达式):

auto object = [&] {
if (cond) {
doSomeStuff();
auto object = getObject();
doMoreStuff();
return object;
} else {
doSomeOtherStuff();
auto object = getDifferentObject();
doEvenMoreStuff();
return object;
}
}(); // note that the lambda must be called

use(object);
即使 Type 这也会起作用不是默认构造的。
这是一个 demo .

关于c++ - 如何有条件地实例化一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62647060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com