我有一个虚拟基类:
class H{
public:
H(); // the implementation is in .cpp file, so this is not pure virtual
virtual ~H();
//... // other members
};
和派生类:
class Hm : public H{
public:
Hm(){ /*define constructor*/ }
...
void method1();
};
我使用Boost.Python将两个类导出到Python。接下来,假设有另一个类X包含H类型的变量:
class X{
public:
X(){ /*define constructor*/ }
H h; // data member
//...
};
类和变量h也暴露给Python。现在,在Python中我可以这样做:
x = X() # construct the object x of type X
x.h = Hm() # assign the data member of type H to the object of type Hm
# no problem with that, because of the inheritance
现在,问题是 - 如何从x.h调用类Hm(method1)的方法?对象x.h是H类型,它不定义派生类method1的方法。所以电话
x.h.method1()
给出错误
那么,有没有办法做到这一点?或许我需要改变课程的设计。在后一种情况下,对于我在上面的例子中试图使用的最佳方式是什么?