我对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中,我可以将其视为BaseLayer,在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样式,该样式具有尽可能少的指针,因此Layer是POD类。
最佳答案
我建议添加virtual
函数以获取渲染层和缓冲层。
class BaseApp : public ofBaseApp {
public:
virtual BaseLayer& getRenderLayer() = 0;
virtual BaseLayer& getBufferedLayer() = 0;
};
// ...
class MainApp : public BaseApp {
public:
virtual BaseLayer& getRenderLayer() { return imageLayer;}
virtual BaseLayer& getBufferedLayer() { return videoLayer; }
private:
VideoLayer videoLayer; // Video + Image layers extend BaseLayer
ImageLayer imageLayer;
};
在适当的地方添加
const
。