/ / Ocorrendo problemas na correspondência de tipos de argumentos entre C ++ e Boost :: Python - python, c ++, boost, boost-python

Tendo problemas em combinar tipos de argumentos entre C ++ e Boost :: Python - python, c ++, boost, boost-python

Eu estou trabalhando na criação de uma interface de C ++ para python para uma API onde eu não tenho permissão para modificar uma parte significativa do C ++ para obter minha interface.

Eu escolhi Boost :: Python para usar como minha ponte de C ++ para python. Eu defini as seguintes partes do meu BOOST_PYTHON_MODULE:

Início da minha parte do 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);
}

Do meu intérprete, meu uso dessa interface é o seguinte:

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

Claro que, no escopo "sandprogression", temos o protótipo desta função que estamos tentando usar acima, ela é definida como:

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

Eu teria assumido que certos tipos sãoautomaticamente conversível entre C ++ e Python, mas aparentemente este não é o caso. Eu tenho derramado sobre a documentação do boost para tentar entender como simplesmente configurar explicitamente o mapeamento, mas não consigo entender como ele é feito .

Respostas:

0 para resposta № 1

sandman_lib.sandprogression.api_blah("path") deve ser usado em vez de sandman_lib.sandprogression().api_blah("path"). Olhe para a exemplo no boost.org.