构造函数的条件调用
Conditional invocation of constructor
假设某些类foo
具有两个自定义构造函数,例如foo::foo(bar const &)
和foo::foo(baz const &)
。根据某种条件的不同,将被认为是援引任何一种的好风格。例如:
bar a;
baz b;
foo my_foo;
if (...) {
my_foo = foo(a);
} else {
my_foo = foo(b);
}
将要求foo
默认可构造(在我想到的具体情况下,这不是很明智),并且本质上是浪费时间(和内存)在默认构建的临时对象的创建(和删除)上。由于范围,一个人无法在IF内部声明my_foo
或其他障碍。
另一种选择是使用new
使用指针和构造。这将效率较低(间接,堆分配),并且可能不安全(不能保证指针不会悬挂;需要delete
,尽管可以通过使用std::unique_ptr
来照顾后者)。
我找到了一种方法:
foo my_foo = (...) ? foo(a) : foo(b);
是因为三元操作员保证详尽而起作用,因此范围不是问题。
我不是三元操作员的忠实拥护者,可能希望在调用CTOR之前在条件块中做其他事情。是否有一种优雅的方法可以使用传统的IF-ELSE语法?
您可以使用lambda
const foo my_foo = [&]
{
if (...)
return foo(a);
else
return foo(b);
} ();
相关文章:
- 循环中的条件:为什么每次都调用strlen(),而vector.size()只调用一次
- 访问条件类成员的方法不仅在被调用时才编译
- 在运行时有条件地删除类成员或跳过调用该成员对象的构造函数
- 如何使用 SFINAE 在方法调用中有条件地定义变量?
- 条件加倍时的递归调用
- "is defined"宏检查及其调用必须处于不同的条件下吗?
- 调用一个小函数两次(例如在if条件和主体中)比将结果存储在局部变量中更可取
- 在循环条件中调用const vector size()似乎缺少优化
- 对基构造函数的条件调用
- 在解压缩可变参数模板时避免"recursive"函数调用,直到运行时条件
- 如何避免参数数量依赖于条件的调用分支?
- 使用条件模板C 调用功能
- 现代C++编译器是否能够避免在某些条件下两次调用常量函数
- 构造函数的条件调用
- 使用模板调用条件函数
- 调用以条件循环(c++)
- 在 CPP 中将函数调用定时为 if 语句条件
- 中断已处于条件变量等待调用中的提升线程
- 尽管有停止条件,无限递归调用仍会执行,因为参数不会前进
- 在POSIX中,我可以保存信号以供调用条件等待的其他线程使用吗.(这些线程来自同一进程)