我的工作在遊戲引擎的原型,並有以下問題:C++ - 設計問題
現在我的引擎實現的DirectX結合,一切工作正常。
我有一個core::Renderer
類有方法來呈現幾何形狀,集着色器,閃電等...
他們中的一些模板,有些不是。
class Renderer {
// ...
template <typename Geometry> RenderGeometry(shared_ptr<Geometry> geometry);
};
比方說,我想延長我的引擎的靈活性和我wan't它使用DirectX和OpenGL工作。據我現在的理解,這個想法是採取一切界面特定的基地core::Renderer
類,使所有這些電話virtual
,然後提供他們的特定於DirectX的和OpenGL特定的實施。
如果我的幾何對象是不是一個模板,一切會更好看:
class Renderer {
virtual void RenderGeometry(shared_ptr<core::Non_template_Geometry> geometry);
};
class DXRenderer {
// Here goes our custom implementation
// for DirectX-based geometry rendering
virtual void RenderGeometry(...)
};
// The same for OpenGL
與第一(初始變體)的問題是,虛函數不允許作爲模板。
所以在這裏談到的問題 - 我應該怎麼解決呢?
這種局面或模板虛擬功能仿真任何黑客/技巧/模式?
「比方說,我想擴展靈活性」的建議:增加了靈活性是一個壞主意 - 會吃你的開發時間。除非必須,否則不要這樣做。額外的API支持也是如此。除非你無法支持額外的3D API,否則不要添加它。 – SigTerm 2010-08-02 23:52:39
@SigTerm那麼,至少我想知道如何解決這類問題。而且,因爲這是一個愛好項目,我有很多時間:) – 2010-08-02 23:55:54