1
我有一個C++對象是虛擬類的孩子,我試圖用python包裝。該文件編譯的,我可以將它導入蟒蛇,但是當我嘗試調用的函數,我得到一個錯誤:Boost Python包裝的虛擬類 - 孩子返回錯誤:不匹配C++簽名
In [3]: x
Out[3]: <beh.MappedBehaviourDomain at 0x23e7158>
//So, obviously the constructor is working (or at least thinks it is)
In [4]: x.subject_count()
---------------------------------------------------------------------------
ArgumentError Traceback (most recent call last)
/home/max/verk/btr-email/build/x86_64/bin/ipython in <module>()
----> 1 x.subject_count()
ArgumentError: Python argument types in
BehaviourDomainWrap.subject_count(MappedBehaviourDomain)
did not match C++ signature:
subject_count(BehaviourDomainWrap {lvalue})
subject_count(BehaviourDomainWrap {lvalue})
我有一個很難理解這個錯誤信息;這是我第一次使用boost python,並且我沒有太多的C++經驗。以下是相關的代碼:
// Instantiating class for use in boost python
struct BehaviourDomainWrap : BehaviourDomain, wrapper<BehaviourDomain>
{
size_t subjectCount() const {
return this->get_override("subjectCount")();
// A bunch of other methods removed
}
BOOST_PYTHON_MODULE(beh) {
class_<BehaviourDomainWrap, boost::noncopyable>("BehaviourDomainWrap")
.def("subject_count", pure_virtual(& BehaviourDomainWrap::subjectCount))
;
class_<MappedBehaviourDomain, bases<BehaviourDomainWrap> >
("MappedBehaviourDomain", init<std::string>())
;
}
怎麼回事,爲什麼?