我正在尝试将我的 Boost.Python 绑定分成多个模块。当包装在一个模块中的类继承自包装在另一个模块中的类时,我在模块导入期间遇到问题。
在此示例中:类 Base 包装在 module1 中,而类 Derived(从 Base 派生)包装在 module2 中。我在尝试导入 module2 时遇到的错误是“RuntimeError:尚未创建基类类 Base 的扩展类包装器”。
模块1.h:
#ifndef MODULE1_H
#define MODULE1_H
#include <string>
class Base
{
public:
virtual ~Base() {}
virtual std::string foo() const { return "Base"; }
};
#endif // MODULE1_H
模块1.cpp:
#include <boost/python.hpp>
#include "module1.h"
BOOST_PYTHON_MODULE(module1)
{
using namespace boost::python;
class_<Base, boost::noncopyable>("Base")
.def("foo", &Base::foo)
;
}
模块2.h:
#ifndef MODULE2_H
#define MODULE2_H
#include <string>
#include "module1.h"
class Derived : public Base
{
public:
Derived() {}
virtual ~Derived() {}
virtual std::string foo() const { return "Derived"; }
};
#endif // MODULE2_H
模块2.cpp:
#include <boost/python.hpp>
#include "module2.h"
BOOST_PYTHON_MODULE(module2)
{
using namespace boost::python;
class_<Derived, bases<Base>, boost::noncopyable>("Derived")
.def("foo", &Derived::foo)
;
}
亚军.py:
import module1
import module2
d = module2.Derived()
print(d.foo())