2016-03-23 2 views
1

Я пытаюсь обернуть класс Cube с Boost.Python, которая имеет подпись следующего вида:Boost.Python преобразования питона кортеж `станд :: tuple` или` станд :: pair`

void insert(const std::pair< int, int>& x){ ... do something .. } 

, если я просто обернуть этот метод следующим образом:

.def("append", &Cube::insert, with_custodian_and_ward<1,2>()) 

Я получаю следующее сообщение об ошибке в Python:

ArgumentError: Python argument types in 
    cube.append(cube, list) 
did not match C++ signature: 
    append(Cube {lvalue}, std::__1::pair<unsigned long, unsigned long>) 

, когда я набираю:

cube.append((1,2)) 

Я не уверен, как правильно преобразовать тип python в тип C++. Я тоже не могу найти подходящий пример.

ответ

0

Я думаю, что самый простой способ будет явно преобразовать объект питона в C++ станд :: пары:

.def("append", FunctionPointer([] (Cube& self, const bp::object& obj) 
    { 
    self.insert(std::make_pair(bp::extract<int>(obj[0]),bp::extract<int>(obj[1]))); 
    })) 
Смежные вопросы