我正試圖在C++土地上找到我的方式,現在越來越困惑。玩具應用程序是一個非常基本的OpenGL引擎。 所以這裏是(我猜簡單)的問題: 我想處理不同頂點數據的網格,所以我有模板vs開關
struct Vertex
{
Vector3f position;
}
struct VertexN : public Vertex
{
Vector3f normal;
}
現在我需要一個Mesh類,它包含數據並繪製它。 我試過這樣的事情:
template<class T>
class Mesh
{
public:
Mesh();
~Mesh();
void load(const T * vertices, int num);
void draw();
protected:
T * vertices_;
};;
不同的頂點必須加載和繪製不同,這可以通過模板專門化來完成。
我的問題是,我喜歡有另一個持有Mesh對象實例的類,但模板類成員顯然是不允許的。
我能想到的另一種解決方案是在Mesh中保存指向基本結構頂點的指針,傳遞所使用的頂點類型的標識符,然後在load()和draw()中使用switch語句以允許不同的實現。
完成此操作的最佳方法是什麼?
任何幫助,非常感謝。
鑑於Vertex類的繼承,Mesh上的模板是否也可以被移除? – drfrogsplat 2010-06-21 15:09:44
@drfrogsplat:只有當你想存儲指向單個頂點的指針時,這可能不是出於性能原因所期望的。我不會在所有頂點類中使用繼承:只是將每種類型的頂點實現爲獨立類或使用模板(例如,這是OpenSceneGraph所做的)。 – 2010-06-21 15:11:32
如果您有權訪問boost(它是Boost.PointerContainer的一部分),請嘗試將'boost :: ptr_vector'設置爲'std :: vector'。在C++ 0x中,你可以使用'std :: vector '來避免boost的依賴。 –
2010-06-21 15:14:13