Я хочу сделать что-то вроде этого:
template <typename T:public Vertex> addTri( T v1, T v2, T v3 )
{
// Take v1.pos, v2.pos, v3.pos and create a geometric repn..
Triangle tri( v1.pos, v2.pos, v3.pos ) ; // all vertices will
// have to have a .pos member.
// Create the vertex buffer..
VertexBuffer<T> vb ...
}
Так как это не работает, это мой обходной путь ..
template <typename T> addTri( T v1, T v2, T v3 )
{
Vertex* p1 = (Vertex*)&v1 ;
// This is a very "shut up C++, I know what I'm doing" type cast.
// I'd like for C++ to know that all vertex types (T in this case)
// __will__ have a Vector member .pos.
Triangle tri( p1->pos, p2->pos, p3->pos ) ;
// Create the vertex buffer..
VertexBuffer<T> vb ...
}
Фон
В случае, если вам интересно, я пытаюсь написать общий код для обработки создания треугольника.
Каждая вершина должна иметь .pos
член, потому что каждая вершина должна иметь позицию в пространстве.
Однако не каждый тип вершины будет иметь текстурную координату. Не каждая вершина будет иметь цвет. Отсюда и параметризованные типы.
Аналогичный подход используется в XNA VertexBuffer.SetData<T>
.