cppyy - как вызвать функцию c ++, которая принимает набор? - PullRequest
0 голосов
/ 26 мая 2019

Предположим, у меня есть следующая функция C ++:

int summap(const map<int,int>& m) {
    ...
}

Я пытаюсь вызвать его из Python с помощью cppyy, отправив dict:

import cppyy
cppyy.include("functions.hpp")
print(cppyy.gbl.summap({55:1,66:2,77:3}))

Я получаю ошибку:

TypeError: int ::summap(const map<int,int>& v) =>
    TypeError: could not convert argument 1

Как я могу вызвать эту функцию?

1 Ответ

1 голос
/ 29 мая 2019

Нет никакого отношения между dict в Python и std :: map в C ++ (у них совершенно другая внутренняя структура), поэтому для этого требуется преобразование, в настоящее время в cppyy нет автоматического преобразования, поэтому сделайте что-то вроде этого:

cppm = cppyy.gbl.std.map[int, int]()
for key, value in {55:1,66:2,77:3}.items():
    cppm[key] = value

, затем передайте cppm в summap.

Автоматическая поддержка списка python / tuple -> std :: vector доступна, но там тоже не умнее, чем копирование (аналогично, b / cвнутренняя структура совершенно иная), поэтому при любом автоматическом преобразовании dict в std :: map <-> python внутренне все равно придется делать копию, как указано выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...