/ / Masz problemy z dopasowaniem typów argumentów między C ++ i Boost :: Python - python, c ++, boost, boost-python

Problem z dopasowaniem typów argumentów między C ++ i Boost :: Python - python, c ++, boost, boost-python

Pracuję nad stworzeniem interfejsu C ++ do Pythona dla API, gdzie nie mam uprawnień do modyfikowania znacznej części C ++ w celu uzyskania mojego interfejsu.

Wybrałem Boost :: Python do użycia jako mój mostek z C ++ do Pythona. "Zdefiniowałem następujące części mojego BOOST_PYTHON_MODULE:

Początek mojej części C ++:

using namespace boost::python;

BOOST_PYTHON_MODULE(sandman_lib) {

class_<manblock::ManDriver>("ManDriver", init< ... >())

scope sandprogression  = class_<SandProgression>("sandprogression");
def("api_create_sand_c_side_from_cfg_file", api_create_sand_c_side_from_cfg_file);
}

Z mojego tłumacza, moje użycie tego interfejsu jest następujące:

>>> import sandman_lib
>>> SAND = sandman_lib.sand_progression()
>>> SAND
<sandman_lib.sandprogression object at 0x7ffff7eaa998>
>>> SAND.api_create_sand_c_side_from_cfg_file("path_to_my_config_file")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Boost.Python.ArgumentError: Python argument types in
sandprogression.api_create_sand_c_side_from_cfg_file(sandprogression, str)
did not match C++ signature:
api_create_sand_c_side_from_cfg_file(char const*)

Oczywiście w zakresie "sandprogression" mamy prototyp tej funkcji, którą próbujemy użyć powyżej, definiuje się jako:

extern "C" void api_create_sand_c_side_from_cfg_file(const char* cfg_file_name);

Założę się, że pewne typy sąautomatycznie wymienialny między C ++ i Python, ale najwyraźniej tak nie jest. Przesyłam dokumentację doładowania, aby spróbować zrozumieć, jak po prostu jawnie skonfigurować mapowanie, ale nie mogę zrozumieć, jak to się stało .

Odpowiedzi:

0 dla odpowiedzi № 1

sandman_lib.sandprogression.api_blah("path") należy użyć zamiast sandman_lib.sandprogression().api_blah("path"). Patrzeć na przykład na boost.org.