默认初始化boost :: optional

时间:2015-02-08 22:55:18

标签: c++ boost optional

有没有办法默认初始化一个boost :: optional变量而不提供T的名字?

struct MyStruct
{
    int a;
};

int main(){
    boost::optional<MyStruct> opt;
    opt = MyStruct(); // <--
}

我的目标是在我只想默认初始化 opt 时省略提供结构名称。

2 个答案:

答案 0 :(得分:6)

如果您的编译器支持可变参数模板并且您使用的是Boost版本1.56或更高版本,请使用不带参数的emplace()

opt.emplace();

如果不满足任何一个条件(没有可变参数模板的编译器或较旧的Boost),请使用不带参数的in_place工厂:

opt = boost::in_place();
在Boost 1.59中,即使在C ++ 03编译器中,你也可以调用0参数emplace()

答案 1 :(得分:2)

如果您要默认初始化可选值

,则可以使用就地工厂
#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);
}

live demo here