Базовый класс:
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)