Это дополнительный вопрос к
std :: vector to boost :: python :: list
Я попробовал приведенный пример:
// C++ code
typedef std::vector<std::string> MyList;
class MyClass {
MyList myFuncGet();
void myFuncSet(MyList& list)
{
list.push_back("Hello");
}
};
// My Wrapper code
#include <boost/python/suite/indexing/vector_indexing_suite.hpp>
using namespace boost::python;
BOOST_PYTHON_MODULE(mymodule)
{
class_<MyList>("MyList")
.def(vector_indexing_suite<MyList>() );
class_<myClass>("MyClass")
.def("myFuncGet", &MyClass::myFuncGet)
.def("myFuncSet", &MyClass::myFuncSet)
;
}
Но когда я пытаюсь использовать его в Python, я получаю сообщение об ошибке (см. Ниже).
Python 2.7.2 (default, Jun 12 2011, 14:24:46) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from mymoduleimport *
>>> mc = MyClass()
>>> p = []
>>> mc.myFuncSet(p)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Boost.Python.ArgumentError: Python argument types in
MyClass.myFuncSet(MyClass, list)
did not match C++ signature:
myFuncSet(MyClass {lvalue}, std::vector<std::string, std::allocator<std::string> > {lvalue})
Из того, что я смог почерпнуть, читая различные другие сайты и посты, требуется конвертер. Может кто-нибудь завершить мой пример, добавив необходимый код конвертера? Я бы сделал это сам, но я недостаточно знаком с boost, чтобы знать, как выглядит такой конвертер.
Заранее спасибо!