如何初始化不可移动和不可复制的 class 成员 - boost::optional

How to initialize non-movable and non-copyable class member - boost::optional

我有一个不可移动和不可复制的类型:

struct A
{
    A(std::string p1, int p2){}
    A(A const &) = delete;
    A(A&&) = delete;
    A& operator=(A const &) = delete;
    A& operator=(A&) = delete;
};

我可以这样构造 boost optional:

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

我还需要初始化 boost::optional<A>,这是一个 class 成员。这是我的解决方案:

class B
{
public:
    B(const boost::optional<A>& op): op_(op) {} 
private:
    const boost::optional<A>& op_;
};

B b(boost::optional<A>(boost::in_place("abc", 5)));

是否有可能只有 boost::optional<A> class 成员并以某种方式初始化它?

编辑(澄清) 我想要 boost::optional<A> op_ class 数据成员,但我不知道如何初始化它。

您可以将 B 的构造函数声明为

class B {
  public:
      B(std::string p1, int p2) :
         op_(boost::in_place<A>(std::move(p1), p2)) {}

  private:
    const boost::optional<A> op_;
};

并将B实例化为

B b("abc", 5);

请注意,我将数据成员 op_ 更改为不在此处引用,这与您问题中 B 的定义相反。