ОК, я обнаружил проблему, до этого я закончил делать преобразование следующим образом:
map<std::string, int> convert_dict_to_map(py::dict dictionary)
{
map<std::string, int> result;
for (std::pair<py::handle, py::handle> item : dictionary)
{
auto key = item.first.cast<std::string>();
auto value = item.second.cast<int>();
//cout << key << " : " << value;
result[key] = value;
}
return result;
}
, а затем внимательно посмотрел на:
auto cppmap = kwargs.cast<map<int, int>>();
и, наконец, заметил моя проблема. это должно было быть:
auto cppmap = kwargs.cast<map<std::string, int>>();
Я допустил ошибку, когда изменил свой пример dict, а затем отменил изменения, но забыл изменить подпись!
В любом случае, кажется, что первое решение может быть лучшим выбором, поскольку оно позволяет разработчику лучше работать с динамикой Python
c.
То есть словарь Python
вполне может включать в себя разные пары (например, string:string
, string:int
, int:float
, et c в одном словаре). Поэтому, убедившись, что элементы корректно реконструированы в c ++, можно сделать намного лучше, используя первый грубый метод!