c – 优雅的解决方案重复,const和非const,getter? [重复]

这个问题已经有一个答案在这里:            >            How do I remove code duplication between similar const and non-const member functions?                                    14答案                            你不要讨厌它,当你有

class Foobar {
public:
    Something& getSomething(int index) {
        // big, non-trivial chunk of code...
        return something;
    }

    const Something& getSomething(int index) const {
        // big, non-trivial chunk of code...
        return something;
    }
}

我们不能实现这两个方法与另一个,因为你不能从const版本(编译器错误)调用非const版本。
强制转换将需要从非常量调用const版本。

有没有真正优雅的解决方案,如果没有,什么是最接近一个?

我记得从一个有效的C书,做的方法是实现非const版本通过转换const从其他函数。

这不是特别漂亮,但它是安全的。由于成员函数调用它是非const,对象本身是非const,允许抛弃const。

class Foo
{
public:
    const int& get() const
    {
        //non-trivial work
        return foo;
    }

    int& get()
    {
        return const_cast<int&>(static_cast<const Foo*>(this)->get());
    }
};
http://stackoverflow.com/questions/856542/elegant-solution-to-duplicate-const-and-non-const-getters

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c – 优雅的解决方案重复,const和非const,getter? [重复]