看板 C_and_CPP 關於我們 聯絡資訊
l大第一種作法的話 user應該只看的到 Renderer這層interface吧 所以l大這方法還必須export CreateInstance這function給user呼叫 然後要new哪一個instance的實作 還是必須用第二種方法判定嗎?(#if OPENGL #else DXD) 目前比較無法理解 第一種作法如果沒搭配上面講的話 該怎麼做到 上層不需要管用opengl還是dxd的方法.... 所以在這層也是必須要寫兩分code 針對opengl和dx分別寫兩套同樣目的的程式碼嗎? 謝謝 ※ 引述《littleshan (我要加入劍道社!)》之銘言: : 比較漂亮的作法: : class Renderer { // 某個處理繪圖用的 abstract class : public: : virtual void render(const Scene& scene) = 0; // 把場景畫出來 : }; : class RendererD3D9 : Renderer { : public: : void render(const Scene& scene) : { : // 使用 DirectX 進行繪圖 : } : }; : class RendererGL : Renderer { : public: : void render(const Scene& scene) : { : // 使用 OpenGL 進行繪圖 : } : }; : 比較醜但是直接的做法 : void Render(const Scene& scene) : { : #ifdef USE_OPENGL : // 使用 OpenGL 進行繪圖 : #else : // 使用 DirectX 進行繪圖 : #end : } : 說穿了也沒什麼神奇的 : 當然其中也有一些技巧就是了 (比如 abstract factory pattern) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.192.70.221