【发布时间】:2012-01-27 09:25:07
【问题描述】:
我有两个虚拟类我想用 boost python 包装,我希望能够编写扩展它们的 Python 类。问题是,其中一个类有一个返回另一个类的引用的方法,我不知道该怎么做。
这是要包装的类代码的简化版本。
class Foo
{
public:
virtual ~Foo() {}
virtual int a() = 0;
};
class Bar
{
public:
virtual ~Bar() {}
virtual Foo const& b() = 0;
};
所以我开始用这种方式包装。
class FooWrap : public Foo, public wrapper<Foo>
{
public:
int a()
{
return this->get_override("a")();
}
};
class BarWrap : public Bar, public wrapper<Bar>
{
public:
Foo const& b()
{
return this->get_override("b")();
}
};
BOOST_PYTHON_MODULE(foobar)
{
class_<FooWrap, boost::noncopyable>("Foo")
.def("a", pure_virtual(&Foo::a))
;
class_<BarWrap, boost::noncopyable>("Bar")
.def("b", pure_virtual(&Bar::b))
;
}
我收到一个关于“无法实例化抽象类 [...] 纯虚函数未定义" "参见 'foo::a' 的声明"
【问题讨论】:
-
如果虚函数和封装类的继承是公开的呢?
-
不,将所有内容设为公开并不能解决我的问题。
-
@MatthieuW 是否可以将函数的返回类型修改为智能指针?
-
@Paul-Manta 不,我的目标是测试一个 c++ 库,我无法更改它的接口。
标签: c++ python boost-python