Проблема
Я пытаюсь преобразовать список списков, возвращаемых функцией python, вызываемой внутри кода C ++.Хотя библиотека pybind11 позволяет преобразовывать типы из типов данных Python в типы данных C ++, моя попытка преобразовать список списков, возвращаемых python, в std::list
из std::list
строк C ++, каждый раз терпит неудачу.
Код
Вот функция python (функция возвращает список списка, содержащий строковые значения):
def return_sheet(self):
"""Returns the sheet in a list of lists
"""
dataTable = []
for r in range(self._isheet.nrows):
datalist = []
for c in range(self._isheet.ncols):
datalist.append(self._isheet.cell_value(r,c))
dataTable.append(datalist)
return dataTable
И здесь я вызываю его в C ++, используя pybind11 :
py::list obj = _tool.attr("return_sheet")();
data = py::cast<SheetData>(obj); // This is where the problem lies, This cast crashes the program
Где SheetData
- это typedef
для:
typedef std::list<std::list<std::string> > SheetData;
Во время отладки я обнаружил, что на самом деле происходит сбой программы приэта строка:
py::object dataTable = _tool.attr("return_sheet")(); // Where _tool.attr("return_sheet")() gives an py::object which is a list of list of str
Кто-нибудь знает, как я могу успешно преобразовать список списков Python в std::list
из std::list
C ++?
EDIT
Вот файл программы Python, который я встраиваю в c ++ [xlanalyser.py]: https://pastebin.com/gARnkMTv
А вот код c ++ [main.cpp]: https://pastebin.com/wDDUB1s4
Примечание: все другие функции в xlanalyser.py не вызывают сбой при встраивании в c ++ [только функция return_sheet () cauSES крушение]