Как мне адаптировать чистый виртуальный метод из шаблона к классу, который наследует от него?

Допустим, у меня есть этот пример шаблона:

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. Означает ли это, что невозможно использовать виртуальные методы такого рода?

0

Решение

Intellisense показывает это сообщение, когда вы звоните неconst функция на объекте, который является const, Как мы можем видеть, ReturnPtr неконстантен. Как правило, вы можете увидеть это сообщение по двум причинам. Во-первых, когда вы пытаетесь позвонить ReturnPtr на const тип объекта BufferWrapper:

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

Второй, когда ваш BufferWrapper Объект является членом данных класса, и вы звоните ReturnPtr на это изнутри const функция-член этого класса:

struct SomeClass
{
BufferWrapper bw;

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]