我有以下简单的结构:
struct X
{
X(std::string name, int value): name_(name), value_(value){}
std::string name_;
int value_;
};
我想将其与boost可选一起使用而不进行复制。这是一个选择:
boost::optional<X> op;
op.emplace("abc", 5);
是否可以不使用emplace函数? (我的意思是一行表达式)
答案 0 :(得分:5)
是的,只需使用转发ctor args的“就位”标签构建它即可!
boost::optional<X> op(boost::optional::in_place_init, "abc", 5);
(ref)
FWIW,如果您不介意采取任何行动,那么也可以这样做:
boost::optional<X> op(X("abc", 5));
浏览该参考页面;有很多方法可以构造或填充boost::optional
。