抽象类的C ++继承

时间:2015-09-10 20:10:41

标签: c++ oop openframeworks

我对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类。

1 个答案:

答案 0 :(得分:0)

我不确定为什么你需要shared_pointer,一个简单的unique_pointer会做得很好。

在C ++中只有两种方法可以处理运行时多态对象 - 通过指针或通过引用。 参考文献似乎不适合您的设计,因此您会遇到指针。如果您不喜欢指针,请将设计重新设计为不使用运行时多态性。