我在使用 C++ 时遇到了一些问题:我有一个 Primitive 类,它包含一个抽象缓冲区类的成员变量。
对于许多不同的顶点类型,具体的缓冲区类以许多不同的形式存在。point-color-normal、point-texcoord-normal、point-normal、point 等。
我需要能够将任何类型的顶点添加到由基元派生的类所持有的缓冲区中,例如四边形、三重列表等。
class Buffer {
//...
template<class T>
virtual void Add(const T&) = 0; // nope! Not compilable
virtual void Add(boost::any&) = 0; // I have been told no boost allowed either..
}
template<class T>
TypedBuffer : public Buffer {
//..
public:
std::vector<T> buffer;
public:
virtual void Add( const T& elem ) { buffer.push_back( elem ); }
}
class Primitive {
protected:
Buffer vertices;
public:
// How can I allow this to happen? \/
virtual void AddVert( const vec3& v) { vertices.Add( v ); }
}
class QuadSet : public Primitive { /*QuadSet Specifics..*/ }
void main(){
QuadSet q;
q.Add( COLOURED_VERT(vec3(1, 2, 3), vec3(0.5,0.5,0.5) ) );
}
请帮忙!