I шаблонизировал класс ранее и в результате этой шаблонизации все классы, которые получили объекты этого нового шаблонного типа, также требуют шаблонизации , даже если шаблонизация полностью не имеет значения .
Итак:
class Shape
- базовый класс для class Sphere
, Cube
, Model
- Каждый
Shape
содержит Mesh
Mesh
теперь шаблонизирован, чтобы позволить в основном VertexBuffer иметь параметризованный тип:
Итак:
template <typename T> struct Mesh
{
VertexBuffer<T> verts ; // Mesh needs to be templated to allow
// the vertex buffer to be templated as well
} ;
Так что теперь класс, который содержит Mesh
(базовый класс Shape
), также должен быть шаблонным:
template <typename T> class Shape
{
Mesh<T>* mesh ;
} ;
А теперь , все методы в любом месте кода должны быть также шаблонизированы , даже если это шаблонирование никак не влияет на код (т.е. этот код не связан с типом вершины члена Mesh)
Так, например, узел octree:
// An octree node
template <typename T> struct ONode // but this class doesn't really benefit
// from templatization
{
AABB bounds ;
ONode* parent ; // facilitate movement thru the tree
ONode* children[8]; // cells, octants, cubelets
Shape<T>* objects ; // for the purposes of the Octree,
// But ALL SHAPES BEHAVE THE SAME. <T> serves no purpose
Это действительно неприятный артефакт, и я не уверен, как остановить перкуляцию шаблонизации в более ранней точке , или если шаблонизация была правильным выбором сейчас, когда я вижу, сколько нужно шаблонизировать .