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

标签 c++ class optimization conditional-statements instantiation

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

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/

相关文章:

c - C 中的结构填充

C++ AMP,for 循环到 parallel_for_each 循环

Matlab:fminsearch 返回的估计值不正确

指向字符串和 append() 方法的指针的 C++ 数组

c++ - 如何让函数访问其他 .cpps 变量?

java - 调用方法,但不知道来自哪个类

c++ - QTableWidget 右键单击​​事件的问题

performance - 为什么 Scala 代码的一个小改动会对性能产生如此巨大的影响?

c++ - 使用 (void*) 作为标识符的一种类型

c++ - 调用作为参数接收的可变参数模板的可变参数模板