Ketchuup69
@Ketchuup69

Как специализировать метод родительского класса?

Базовый класс:
template <class Owner, typename Resource>
class RAII
{
	...

	protected:
		Resource resource;

		Resource constructor();
		void destructor(Resource &resource);
};


Для каждого Owner я хочу иметь различные реализации методов constructor и destructor.

Есть такой дочерний класс и метод определённый у базового класса:
class Texture2D final : public RAII<Texture2D, unsigned int>
{
    ...
};

template <>
unsigned int Texture2D::RAII::constructor()
{
    ...
}


Этот случай собирается без ошибок. Но вот следующий уже нет:

template <unsigned int type>
class Shader final : public RAII<Shader<type>, unsigned int>
{
    ...
};

template <unsigned int type>
unsigned int Shader<type>::RAII::constructor()
{
	return glCreateShader(type);
}


Ошибка:
Nested name specifier 'Shader<type>::RAII::' for declaration does not refer into a class, class template or class template partial specialization
.

Как можно определить метод Shader::RAII::constructor() для произвольного type?

(Компилятор MinGW 8.1.0, стандарт C++20)
  • Вопрос задан
  • 101 просмотр
Пригласить эксперта
Ответы на вопрос 2
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Погодите, вы хотите определить метод родительского класса в наследнике? Ну так для этого наследование и сделано. Методы надо перегрузить.

Определите shader::construct и пометьте override.
Ответ написан
Ketchuup69
@Ketchuup69 Автор вопроса
Короче, решил я тем, что перенёс методы constructor и destructor в классы потомков (где их и определяю) и вызываю их в RAII через класс Owner :3
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы