【问题标题】:How to forward constructor arguments to boost::optional如何将构造函数参数转发给 boost::optional
【发布时间】:2019-04-01 16:58:30
【问题描述】:

我有以下简单的结构:

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

【问题讨论】:

    标签: c++ c++11 boost boost-optional


    【解决方案1】:

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

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

    (ref)

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

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

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

    【讨论】:

    • 你的鼻子是参考页
    • boost::optional op(X("abc", 5));使用复制构造函数
    • @Irbis 为什么会这样?有一个 optional&lt;T&gt;::optional( T&amp;&amp; v ) ctor 具有记录的移动语义(请参阅链接的 ref),这里的参数是一个临时的(因此是一个右值)。
    • 你是对的。我已经定义了一个复制ctor来查看它是否被调用并且移动构造函数尚未生成。当我定义复制和移动 ctor 时,我看到调用了 move ctor。
    猜你喜欢
    • 2019-10-11
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    • 2019-09-02
    相关资源
    最近更新 更多