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

How to forward constructor arguments to boost::optional

我有以下简单结构:

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

    std::string name_;
    int value_;
};

我想在不复制的情况下将其与 boost optional 一起使用。这是一个选项:

boost::optional<X> op;
op.emplace("abc", 5);

不使用 emplace 函数可以吗? (我是说一行表达式)

是的,只需使用转发 ctor args 的 "in place" 标签构造它!

boost::optional<X> op(boost::optional::in_place_init, "abc", 5);

(ref)

FWIW 如果你不介意移动那么这也有效:

boost::optional<X> op(X("abc", 5));

向下浏览该参考页;有很多方法可以构造或填充 boost::optional.