访问正确的重载虚函数
Accessing correct overloaded virtual function
我正在尝试覆盖下面的virtual void clear();
:
class DerivatedGraphicsContext : public osg::GraphicsContext {
public:
void clear() { /* Do something */ }
};
但是,我需要使用 osg::GraphicsContext::createGraphicsContext
方法初始化我的 DerivatedGraphicsContext
对象:
DerivatedGraphicsContext* dgc = (DerivatedGraphicsContext*)osg::GraphicsContext::createGraphicsContext(..);
问题是,当我现在调用dgc->clear();
时,它将调用osg::GraphicsContext::clear((方法。
我尝试过static_cast
或dynamic_cast
强制转换,但我不确定这是否可能,或者我是否需要在我的派生类中重新实现 createGraphicsContext,以便 DerivatedGraphicsContext
类访问 clear()
方法。
任何建议将不胜感激!
编辑:
createGraphicsContext(..)
返回通过调用某些Windows API创建的osg::GraphicsContext*
。
因为osg::GraphicsContext具有纯虚函数,所以该类是抽象的,如果不实现方法就无法实例化。因此,甚至不可能使用osg::GraphicsContext* gc = new osg::GraphicsContext()
,当然DerivatedGraphicsContext
也是如此。
由于我无法使用 new 关键字,因此我无法将其内容复制到我可以返回其指针的DerivatedGraphicsContext
。
来源可在此处获得:
来源: http://trac.openscenegraph.org/projects/osg//browser/OpenSceneGraph/trunk/src/osg/GraphicsContext.cpp
页眉:http://trac.openscenegraph.org/projects/osg//browser/OpenSceneGraph/trunk/include/osg/GraphicsContext
将 createGraphicsContext(..( 调用转换为 DerivatedGraphicsContext* 的结果的可能性显然取决于在 createGraphicsContext 中实际创建的对象及其类。正如你所说的clear((方法在基类osg::GraphicsContext中被描述为虚拟的,我想createGraphicsContext返回值的真正运行时类型与DerivatedGraphicsContext无关。如果这是真的,dynamic_casting DerivatedGraphicsContext* 只会给你 NULL 值。我认为您需要在后代类中实现另一个静态工厂方法,类似于 GraphicsContext::createGraphicsContext,或者使用工厂方法模式来选择要实例化的类。
- 为什么使用SFINAE而不是函数重载
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- c++:可变模板和函数重载
- 在缺少函数重载时抛出异常,并带有 std::variant 而不是编译时错误
- 解决模板成员函数重载
- 为什么不允许成员函数和非成员函数之间的函数重载?
- 推断模板化函数中的函数重载
- C++复制函数重载导致"must be a nonstatic member function"错误
- 为什么 std::sort 找不到合适的(静态成员)函数重载?
- 可变参数泛型 lambda 和函数重载
- C++中的函数重载和继承
- 当有右值构造函数可用时,为什么从右值调用类引用构造函数重载?
- C/C++ 可变参数宏函数重载
- 将基类的成员函数重载到其他派生类C++
- C++ 函数重载匹配
- C++函数重载,具体步骤是什么
- C++:使用 param pack 显式调用函数重载
- 隐式生成的函数重载用于右值参数?
- 使用函数重载输入运算符
- 运算符重载函数上的函数重载