1

C++ で問題が発生しています。プリミティブ クラスがあり、抽象バッファ クラスのメンバー変数が含まれています。

具体的なバッファ クラスは、多くの異なる頂点タイプに対してさまざまな形式で存在します。point-colour-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) ) );
}

助けてください!

4

1 に答える 1