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

时间:2019-04-01 19:10:47

标签: c++11 boost 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可选:

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

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

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>类成员并以某种方式对其进行初始化?

编辑(说明) 我想拥有boost::optional<A> op_类数据成员,但我不知道如何初始化它。

1 个答案:

答案 0 :(得分:2)

您可以将$up = $true $finish = $false $timeout = 50 Write-Host "Updating" -NoNewline do { for ($i=0;$i -le 100;$i++){ if ($i -eq 100){$up = !$up} if ($up){ $str = "" $x=99-$i for($z=0;$z -le $i;$z++){$str+="."} for($y=0;$y -le $x;$y++){$str+=" "} Write-host "`rUpdating$str" -NoNewline Start-Sleep -Milliseconds $timeout }else{ $str = "" $x=99-$i for($y=0;$y -le $x;$y++){$str+="."} for($z=0;$z -le $i;$z++){$str+=" "} Write-host "`rUpdating$str" -NoNewline Start-Sleep -Milliseconds $timeout } } if ($timeout -le 0){$finish = $true} $timeout-=10 } until ($finish) $str = "" for ($i=0;$i -le 93;$i++){$str+=" "} Write-Host "`rUpdate Complete!$str" Read-Host "Press [ENTER] to close this Window" 的构造函数声明为

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_更改为此处未引用。