默认初始化的升压::可选
Default initialized boost::optional
是否有任何方法可以默认初始化boost::可选变量而不提供T的名称?
struct MyStruct
{
int a;
};
int main(){
boost::optional<MyStruct> opt;
opt = MyStruct(); // <--
}
我的目标是,当我只想默认初始化opt时,省略提供结构名称。
如果您的编译器支持可变模板,并且您使用的是Boost版本1.56或更高版本,请使用不带参数的emplace()
:
opt.emplace();
如果不满足任何一个条件(无论是没有可变模板的编译器还是旧的Boost),请使用不带参数的in_place
工厂:
opt = boost::in_place();
在Boost 1.59中,即使在C++03编译器中,您也可以调用0参数emplace()
。
如果您想默认初始化可选值,则可以使用就地工厂
#include <boost/optional.hpp>
#include <boost/utility/in_place_factory.hpp>
struct Foo
{
Foo() {}
int bar = 5;
};
int
main()
{
boost::optional<Foo> foo;
assert(!foo);
foo = boost::in_place();
assert(foo);
}
现场演示。
相关文章:
- 制作可用于初始化向量的迭代器
- 可视C++初始化样式
- 可视化C++将分配移动到未初始化的对象?
- 谷物/C++ 11 - 如何指定反序列化的可选参数
- 函数的可选模板化参数
- 类内非静态字段初始化 + 对象池 - >降低可维护性/可读性
- 大括号初始化可防止非常量使用临时
- 可变参数宏 - 可选初始值设定项表达式
- 如何初始化用户定义的数据类型的STD ::可选
- 初始化非默认可构造元素的 std::数组
- 使初始化变量可供多个属性初始化方法访问
- 是一种基本类型的挥发性初始化,可观察到的行为
- 类中可选常量引用的初始化
- 如何在构造函数中初始化分配的堆可变量
- 如何取消初始化 std::实验::可选
- 默认初始化的升压::可选
- 成员变量是否可用于初始化列表中的其他成员
- 没有合适的默认构造函数可用于初始化 ostream 指针
- 可以抛出未初始化的 std::可选或 boost::可选构造函数
- std::引用类型的可选专用化