Я хочу создать шаблон абстрактного класса, заставив все экземпляры реализовать функцию doStuff с использованием чистой виртуальной функции.Реализация чистых виртуальных функций из класса шаблонов - типы параметров
У меня есть следующий шаблон:
template<class T>
class X
{
public:
X() {};
virtual ~X() {};
virtual X<T>& doStuff(X<T>& x) = 0;
};
и экземпляр с T = INT:
class Y : public X<int>
{
public:
Y();
virtual ~Y();
Y& doStuff(Y& x) {
Y res;
Y& res2 = res;
return res2;
}
};
Я получаю сообщение об ошибке:
В функции члена «Y & Y :: doStuff (Y &) ': не может объявить переменную' res 'для абстрактный тип «Y», поскольку следующие виртуальные функции являются чистыми в пределах «Y»: Х Х & :: DoStuff (Х &) [с Т = INT]
Если я изменить тип аргумента к DoStuff в Y, все в порядке:
class Y : public X<int>
{
public:
Y();
virtual ~Y();
Y& doStuff(X<int>& x) {
Y res;
Y& res2 = res;
return res2;
}
};
Почему параметр не является ссылкой на объект Y, если Y реализует X?
Возвращаемое значение Y & не создает аналогичное сообщение об ошибке.
Возможно, я использую неправильный подход для достижения того, чего хочу, - не стесняйтесь, дайте мне знать.
Несвязанный: вы возвращаете ссылку на локальную переменную, следовательно * ссылку на обман * – vsoftco
Это правда. Я просто хотел, чтобы образец был скомпилирован. – User