C++ 如何在setter方法中设置boost::可选成员变量的值?
我无法发布确切的代码,但我有一个类C++ 如何在setter方法中设置boost::可选成员变量的值?,c++,boost,C++,Boost,我无法发布确切的代码,但我有一个类Mike,我希望它包含自定义对象类型的成员变量BobBob可能不会在构建Mike时设置,但我希望稍后在调用setter方法时设置它。我正试图用一个boost::optional来实现这一点,方法如下: class Mike { public: void setBob(const Bob& bob) { m_bob = bob; } boost::optional<Bob> getBob() co
Mike
,我希望它包含自定义对象类型的成员变量Bob
Bob
可能不会在构建Mike时设置,但我希望稍后在调用setter方法时设置它。我正试图用一个boost::optional
来实现这一点,方法如下:
class Mike
{
public:
void setBob(const Bob& bob)
{
m_bob = bob;
}
boost::optional<Bob> getBob() const
{
return m_bob;
}
private:
boost::optional<Bob> m_bob;
}
我也试着换了线
m_bob = bob;
与
知道正确的方法是什么吗?删除了
Bob
的默认赋值运算符,因为m_value
的值是const
而无法更新
有两种可能的解决方案:
m_值
nonconst
。类中有const
成员是不常见的(尽管完全有效)。通常使用const Bob
,这将使成员const
emplace
将新值分配给可选值,这将销毁旧值并创建新值,而不是分配给旧值(如果存在)。根据Bob的确切性质,这可能会稍微贵一点
void setBob(const Bob& bob)
{
m_bob.emplace(bob);
}
Bob
似乎是不可分配和不可复制的。如果是这种情况,则无论是否在数据成员周围使用std::optional
,都无法将其分配给数据成员。与此代码无关,所有内容都与Bob
的语义有关。请提供。什么是Bob?使用可选时是否会出现相同的错误?对于非可选的Bob
,您是否会遇到相同的错误?对于非可选的Bob
,我会遇到一个错误,因为面Bob
没有默认构造函数Bob
必须在其构造函数中包含多个参数,因此在构造Mike
时,不能使用空的Bob
成员变量。这可能是导致这个问题的原因吗?可能是。请出示一个mcve,这样我们就可以确定我决定使用选项1,因为有一个常量成员变量可能会在我的软件中引起类似的问题。值m_value
不应该更改,但是保持它常量似乎不值得为我的用例费心。
m_bob = boost::optional<Bob>(bob);
class Bob
{
public:
Bob(const double value) : m_value(value)
{
}
private:
const double m_value;
};
void setBob(const Bob& bob)
{
m_bob.emplace(bob);
}