我想做这样的事情:
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> http://msdn.microsoft.com/en-us/library/bb198836.aspx.