[英]Modify const parameter reference
好的,所以我有两个看起来像的类:
class Item
{
private:
HANDLE Parent;
public:
Item(const Item &I) = delete;
Item(Item &&I) = delete;
void SetParent(HANDLE Handle);
Item& operator = (const Item &I) = delete;
Item& operator = (Item &&I);
};
void Item::SetParent(HANDLE Handle)
{
this->Parent = Handle;
}
Item& Item::operator = (Item&& I) {/*Do Move Here*/}
class Box
{
private:
HANDLE Handle;
public:
void Add(const Item &I);
};
void Box::Add(const Item &I)
{
I.SetParent(this->Handle); //Error.. Item I is const.
}
我得到的错误是const,这是有道理的,但是我需要一种方法来实现Item I的SetParent,而又不会失去按原样构造I的能力:
Box B(Item());
代替:
Item I;
Box B(I);
有什么想法可以保持Set的内联结构,同时又可以通过调用SetParent对其进行修改吗?
一种解决方案是将Parent
成员声明为可变的,并使SetParent
方法恒定。 以下是示例代码,可在线获取
typedef int HANDLE;
class Item
{
private:
mutable HANDLE Parent;
public:
Item(const Item &I) = delete;
Item(Item &&I) = delete;
void SetParent(HANDLE Handle) const;
Item& operator = (const Item &I) = delete;
Item& operator = (Item &&I);
};
void Item::SetParent(HANDLE Handle) const
{
this->Parent = Handle;
}
class Box
{
private:
HANDLE Handle;
public:
void Add(const Item &I);
public:
Box(const Item &I) {
Add(I);
}
};
void Box::Add(const Item &I)
{
I.SetParent(this->Handle); //Error.. Item I is const.
}
int main(void) {
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.