如何初始化不可移动和不可复制的 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
的定义相反。
我有一个不可移动和不可复制的类型:
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
的定义相反。