我對C++有點新,並試圖找出如何解決繼承問題。抽象類的C++繼承
我有通用的Open Frameworks應用程序BaseApp,然後是MainApp,這是BaseApp中框架的特定實現。
應用程序可以呈現全屏圖層並緩衝另一圖層進行過渡。圖層也從BaseLayer類擴展而來,像BaseApp在擴展之前不會執行任何操作。
所以
class BaseApp : public ofBaseApp {
public:
BaseLayer renderLayer;
BaseLayer bufferedLayer;
}
// ...
class MainApp : public BaseApp {
public:
VideoLayer videoLayer; // Video + Image layers extend BaseLayer
ImageLayer imageLayer;
}
而我想要做的是說,我的renderLayer是我imageLayer,我的bufferedLayer是我videoLayer,即:renderLayer = (some class which extends layer)
所以我BaseApp裏面我可以把它當作一個基礎層在我MainApp我可以把它當作一個VideoLayer,ImageLayer等
我結束了shared_ptr
的,這似乎髒實現這一點,但工作原理:
class BaseApp : public ofBaseApp {
public:
shared_ptr<BaseLayer> renderLayer;
}
// inside MainApp.setup()
renderLayer = make_shared<ImageLayer>();
if (shared_ptr<ImageLayer> imageLayer = dynamic_pointer_cast<ImageLayer>(renderLayer)){
// ImageLayer specific setup
imageLayer->setup("assets/tiger.png",0,0,800,600);
}
有沒有更簡單的方法來實現這個目標?我一直試圖堅持oF風格,儘可能少的指針,所以一個圖層是一個POD類。
我仍然需要根據需要交換圖層,渲染和緩衝圖層並不總是圖像和視頻圖層,但我確實喜歡這樣刪除所有的投射。 – mcornell
@mcornell,如果您有任何問題,請張貼另一個問題。 –