繁体   English   中英

修改const参数参考

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM