boost python无法识别多重继承

时间:2014-07-15 20:34:34

标签: c++ multiple-inheritance boost-python

我有多个c ++类继承如下:

struct RefCounterBase
{
    virtual ~RefCounterBase(){}
 ....
};
struct A : public virtual RefCounterBase{
    virtual void method_a(){...}
};
struct B : public virtual RefCounterBase{
    virtual void method_b(){...}
};
class Concrete : public A, public B{
    virtual void method_concrete(){...}
};

一些基于RefCounterBase

继承的智能指针
template <class T>
struct SmartPtr{
 ...
}

以下代码在boost 1.55中描述了python中的Concrete声明

boost::python::class_<
     Concrete, 
     boost::python::bases<A,B>,
     SmartPtr<Concrete>, 
     boost::noncopyable>("Concrete", "some doc", boost::python::no_init)
    .def("method_concrete", &Concrete::method_concrete, "Some doc")

最后我有一些工厂返回A的实例。在python代码中,我检查了实例是B并需要调用method_b。我收到如下错误:

'A' object has no attribute 'method_b'

看起来我的问题与Boost Python: polymorphic container?所描述的问题几乎相同,但我无法以提议的方式修复它。

更新:我添加了诊断打印件,以确定从我的工厂返回的内容 - 结果类型为A

type(a_inst).mro()

返回[<class 'A'>, <class 'Boost.Python.instance'>, <class 'object'>] - 这意味着boost在编译时无法解析正确的信息

0 个答案:

没有答案