覆盖返回非const指针的父方法与返回const指针的方法

时间:2019-07-25 10:47:59

标签: casting overriding const

我正在继承一个具有void* A::data()方法的类A。在子类B中,我有一个ctor,它带有一个const void*,我想通过重写的const void* B::data() const方法返回它。

我本来可以做到(在B的声明中):

void *data() = delete
const void *data() const { return m_data; }

,这将使覆盖的data()方法成为唯一可用的方法。取而代之的是,即使没有使左值不能为const的东西(例如打印返回值),GCC和clang似乎都认为我尝试使用已删除的方法。

还有另一种方法可以实现这一目标,但不能归结为在B中使用诸如hack的方法来覆盖void* A::data()

void *data()
{
    void** pp = const_cast<void**>(&m_data);
    return *pp;
}

0 个答案:

没有答案