有什么办法可以在不提供T名的情况下默认初始化boost :: optional变量吗?默认初始化boost ::可选
struct MyStruct
{
int a;
};
int main(){
boost::optional<MyStruct> opt;
opt = MyStruct(); // <--
}
我的目标是省略提供结构的名字时,我只是想为默认初始化选择。
有什么办法可以在不提供T名的情况下默认初始化boost :: optional变量吗?默认初始化boost ::可选
struct MyStruct
{
int a;
};
int main(){
boost::optional<MyStruct> opt;
opt = MyStruct(); // <--
}
我的目标是省略提供结构的名字时,我只是想为默认初始化选择。
您可以使用就地工厂,如果你想默认初始化一个可选值
#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);
}
如果你的编译器支持可变参数模板,并且使用升压版本1.56或更高版本,使用emplace()
不带任何参数:
opt.emplace();
如果任一条件不满足(或编译器没有可变参数模板或旧的升压)使用in_place
出厂不带任何参数:
opt = boost::in_place();
在升压1.59,您将能够调用0参数的emplace()
即使在C++编译器03。
'boost :: optional'现在有'emplace()'成员函数(从1.56.0开始)。我们应该使用它。 – 2015-02-09 03:58:18