/ / Avendo problemi con la corrispondenza tra tipi di argomenti tra C ++ e Boost :: Python - python, c ++, boost, boost-python

Problemi con la corrispondenza tra tipi di argomenti tra C ++ e Boost :: Python - python, c ++, boost, boost-python

Sto lavorando alla creazione di un'interfaccia C ++ in Python per un'API in cui non sono autorizzato a modificare una porzione significativa del C ++ per ottenere la mia interfaccia.

Ho scelto Boost :: Python da utilizzare come bridge da C ++ a python. Ho definito le seguenti parti del mio BOOST_PYTHON_MODULE:

Inizio della mia porzione 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);
}

Dal mio interprete, il mio uso di questa interfaccia è il seguente:

>>> 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*)

Ovviamente, nell'ambito di "sandprogression", abbiamo il prototipo di questa funzione che stiamo cercando di usare sopra, è definito come:

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

Avrei pensato che alcuni tipi fosseroconvertibile automaticamente tra C ++ e Python, ma a quanto pare non è questo il caso: mi sono riversato sulla documentazione di boost per cercare di capire come impostare semplicemente semplicemente la mappatura, ma non riesco a capire come è fatto .

risposte:

0 per risposta № 1

sandman_lib.sandprogression.api_blah("path") dovrebbe essere usato al posto di sandman_lib.sandprogression().api_blah("path"). Guarda a esempio su boost.org.