Как преобразовать объект pybind11 в void * - PullRequest
0 голосов
/ 04 апреля 2020

Я пишу библиотеку, в которой хочу скрыть зависимость Pybind11. Поэтому я хочу изменить все py::object s на void* в заголовке, доступном для клиентов, а затем в разделе реализации я конвертирую void* обратно в py::object, это должно быть.

Однако я заметил, что делает что-то вроде:

//tmp.h
private:
// previously py::object module
void* module;
//tmp.cpp
void tmp::some_func()
{
    this->module = reinterpret_cast<void*>(py::module::import("MyModule")); 
    // and seemingly we cant something like this either
    py::object some_func = reinterpret_cast<py::object>(this->module).attr("some_func");
    ...  
}

не правильно и терпит неудачу со следующими ошибками соответственно:

Severity    Code    Description Project File    Line    Suppression State
Error   C2440   'reinterpret_cast': cannot convert from 'pybind11::module' to 'void *'  CoreLib l:\wrapper\wrapper\core.cpp 40  

Severity    Code    Description Project File    Line    Suppression State
Error   C2440   'reinterpret_cast': cannot convert from 'void *' to 'pybind11::object'  CoreLib l:\wrapper\wrapper\core.cpp 41  


Как я должен go об этом преобразование?

...