Я преподавал программирование игр и провел много времени, рассказывая о нарушении зависимостей с целью, чтобы старый код не изменился, если будет введен новый код. Мы настраивали объект рендеринга, и я решил шаблонизировать функцию рендеринга, чтобы показать некоторые варианты использования классов признаков и т. Д. Но это привело к интересной идее.
Если я никогда не предоставляю универсальное тело и предоставляю только полную специализацию, класс рендеринга может быть расширен в зависимости от того, что он может визуализировать из внешнего кода, и если рендерится объект, который не имеет полной специализации, произойдет сбой компилятора вместо выполнения , Это дает играм, использующим эту систему, возможность создавать настраиваемые объекты для рендеринга и расширять функциональность, не изменяя файлы рендеринга hpp или cpp.
Это известный шаблон проектирования, или это ужасная идея и почему, или кто-то еще сделал это? Я хотел бы знать, есть ли здесь серьезная проблема, потому что все, что я вижу, является положительными.
Спасибо всем.
Вот форматированный код.
Я делаю это немного по-другому, поэтому клиентский код не знает, что это шаблон.
class Renderer
{
public:
void SwapBuffers();
template<typename RenderObj>
void Render(const RenderObj&);
};
// Full specializations
class Sprite;
template<> void Renderer::Render<Sprite>(const Sprite&);