我试图覆盖下面的virtual void clear();
:
class DerivatedGraphicsContext : public osg::GraphicsContext {
public:
void clear() { /* Do something */ }
};
但是,我需要使用DerivatedGraphicsContext
方法初始化我的osg::GraphicsContext::createGraphicsContext
对象:
DerivatedGraphicsContext* dgc = (DerivatedGraphicsContext*)osg::GraphicsContext::createGraphicsContext(..);
问题在于,当我现在调用dgc->clear();
时,它将调用osg :: GraphicsContext :: clear()方法。
我尝试过投射static_cast
或dynamic_cast
,但我不确定是否可行,或者我是否需要在派生类中重新实现createGraphicsContext以便{{1 clear()
类要访问的方法。
任何建议都将不胜感激!
编辑:
DerivatedGraphicsContext
返回createGraphicsContext(..)
,通过调用某些Windows API来创建它。
因为osg :: GraphicsContext具有纯虚函数,所以该类是抽象的,如果不实现这些方法就无法实例化。因此,甚至不可能使用osg::GraphicsContext*
,当然osg::GraphicsContext* gc = new osg::GraphicsContext()
也是如此。
由于我无法使用new关键字,因此我无法将其内容复制到我可以返回其指针的DerivatedGraphicsContext
。
源代码可在此处获取:
答案 0 :(得分:0)
对DerivatedGraphicsContext *的createGraphicsContext(..)调用的结果的可能性显然取决于在createGraphicsContext及其类中实际创建的对象。当你声明clear()方法在基类osg :: GraphicsContext中被解析为虚拟时,我认为createGraphicsContext返回值的实际运行时类型与DerivatedGraphicsContext无关。如果它是真的,对DerivatedGraphicsContext *的dynamic_casting将只给你NULL值。我认为你需要在你的后代类中实现另一个静态工厂方法,类似于GraphicsContext :: createGraphicsContext,或者使用Factory method模式来选择要实例化的类。