默认初始化的升压::可选

Default initialized boost::optional

本文关键字:可选 初始化 默认      更新时间:2023-10-16

是否有任何方法可以默认初始化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);
}

现场演示。