2

我有以下简单的结构:

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 功能?(我的意思是一行表达式)

4

1 回答 1

5

是的,只需使用转发 ctor args 的“就地”标签构建它!

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

参考

FWIW,如果您不介意搬家,那么这也可以:

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

向下扫描该参考页;有很多方法可以构建或填充boost::optional.

于 2019-04-01T17:05:52.870 回答