如何将纯虚拟方法从模板调整为从模板继承的类

How do I adapt a pure virtual method from a template to the class that inherits from it?

本文关键字:继承 调整 虚拟 方法      更新时间:2023-10-16

假设我有这个示例模板:

template<class T>
class Wrapper
{
virtual T* ReturnPtr() = 0;
};

然后我继承了它:

class Buffer; //some class
class BufferWrapper : public Wrapper<Buffer>
{
virtual Buffer* ReturnPtr(); //<< (1.)
}
  1. 这是正确的方法吗?当我这样写的时候没有给我任何intellisense错误,但一旦我编写ReturnPtr()在某个地方,它告诉我"对象的类型限定符不是与成员功能兼容"
  2. 这是否意味着不可能使用这样的虚拟方法

Intellisense在对const对象调用非const函数时显示该消息。正如我们所看到的,ReturnPtr是非常数。您可能会看到此消息,通常有两个原因。第一种是当您试图在类型为BufferWrapper:的const对象上调用ReturnPtr

const BufferWrapper bw;
bw.ReturnPtr(); // Can't call non-const member function on const object

第二种情况是当您的BufferWrapper对象是一个类的数据成员,并且您正在从该类的const成员函数中对其调用ReturnPtr时:

struct SomeClass
{
  BufferWrapper bw;
  void SomeClass::SomeFunc() const
  {
    bw.ReturnPtr(); // Cannot call non-const member function here
  }
}