如何区分使用运算符调用的常量和非常量方法

时间:2018-06-01 22:09:36

标签: c++ operator-overloading

我有一个代理用作容器中的返回类型而不是实际数据,尽可能复制容器直到实际更改为止。

这是返回代理的方法:

Proxy operator[]( unsigned long index )
{
    return ( Proxy( *this, index ) );
}

现在的问题是容器的数据是用户定义的对象。我需要一种方法来区分实例的用户调用常量和非常量方法,以便知道是否需要首先复制容器。

对于非常数方法,我使用了操作符箭头:

Proxy
{
    ...

    UserDefinedObject* operaotr->() { return &m_instance; }

    UserDefinedObject* operaotr=>() { m_instance.CopyOnWrite(); return &m_instance; }

    ...

private:

    UserDefinedObject& m_instance;

    unsigned long m_index;

};

现在我试图为常量方法找到一种方法。

问题是这是唯一一个在结果上重新应用的运算符,并且点运算符不能重载。

有没有办法让另一个操作符重载以获得类似于操作符箭头的行为,或者您能想到的其他方式会让我获得所需的行为?

非常感谢!

0 个答案:

没有答案