如何避免重复的const和非const虚拟函数?是否可以

How to avoid repeated const and non-const virtual functions ? is it possible?

本文关键字:const 函数 是否 虚拟 和非 何避免      更新时间:2023-10-16

假设我有一个具有以下虚拟函数的基类:

virtual int* get(){ return nullptr; }

我想提供const版本(请记住我在旧版代码中有50个不同实现的球场(

const int* get() const { return const_cast<decltype(this)>(this)->GetReturn(); };//NEED CODE BADLY: const_cast :/

但是这个想法需要使用const_cast -Scott Meyer在他的书中提出这种方法(尽管情况是逆转的( - 但是它真的是安全的(如果是,如果是,也是"未来的"吗?(示例成员是const?

我可以通过一些搜索/替换来扭转这种情况,但是在所有类上都有两个实现似乎是太多的"复制纸"。

但是真的很安全

不幸的是:

变体1:

class C
{
    int n;
public:
    int* get() { ++n; return &n; }
    int const* get() const { return const_cast<decltype(this)>(this)->get(); }
};

变体2:

class C
{
    int const n;
public:
    int const* get() const { return &n; }
    int* get() { return const_cast<int*>(const_cast<decltype(this) const*>(this)->get()); }
    void demo() // non-const!
    {
        ++*get();
    }
};

承认,第二种情况可能不太可能 - 但也不是不可能。因此,在两个变体中的任何一个中,都有一个机会,可以提出不确定的行为...