如何将构造函数参数转发给boost :: optional

Irb*_*bis 2 c++ boost c++11 boost-optional

我有以下简单的结构:

struct X
{
    X(std::string name, int value): name_(name), value_(value){}

    std::string name_;
    int value_;
};
Run Code Online (Sandbox Code Playgroud)

我想将其与boost可选一起使用而不进行复制。这是一个选择:

boost::optional<X> op;
op.emplace("abc", 5);
Run Code Online (Sandbox Code Playgroud)

是否可以不使用emplace函数?(我的意思是一行表达式)

Lig*_*ica 5

是的,只需使用转发ctor args的“ in place”标记构造它即可!

boost::optional<X> op(boost::optional::in_place_init, "abc", 5);
Run Code Online (Sandbox Code Playgroud)

参考

FWIW,如果您不介意采取任何行动,那么这也适用:

boost::optional<X> op(X("abc", 5));
Run Code Online (Sandbox Code Playgroud)

扫描该参考页面;有大量的方式来构造或填充一个boost::optional