【发布时间】:2014-01-15 10:32:24
【问题描述】:
我使用 MonkSVG 库:
类对象定义为:
//mkSVG.h
namespace MonkSVG {
using namespace std;
class SVG;
class ISVGHandler {
public:
typedef boost::shared_ptr<ISVGHandler> SmartPtr;
...
ISVGHandler::SmartPtr _handler;
...
那么这个库的作者定义another class:
class OpenVG_SVGHandler : public ISVGHandler
并且可以通过_handler从SVG访问ISVGHandler的变量。
我继承了我自己的两个类:第一个来自ISVGHandler,第二个来自SVG,第一个有自己的变量,但我无法直接访问它们。我找到的唯一解决方案是创建一个 setter-getter 方法,但即便如此,我也需要在根类和最后一个继承的类中定义它们。
有没有更好的解决方案?
【问题讨论】:
-
boost::dynamic_pointer_cast浮现在脑海中,但如果你真的需要它,你应该重新考虑你的设计。如果您需要派生类的实例,请明确说明,而不是(可能很危险)强制转换。 -
我假设你必须使用工厂生成器来构造处理程序,静态 ISVGHandler::SmartPtr OpenVG_ISVGHandler::create()?是否存在多种不同类型的 SVG 与多种不同类型的 SVGHandler 混淆的风险,或者程序总是只使用一种类型(OpenVG)?
标签: c++ pointers inheritance boost shared-ptr