假设我有以下C++函数:
int summap(const map<int,int>& m) {
...
}我尝试使用cppyy从Python调用它,方法是发送一个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如何调用此函数?
发布于 2019-05-29 06:12:05
Python的dict和C++的std::map (两者的内部结构完全不同)之间没有关系,所以这需要一个转换,目前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 list/tuple -> std::vector的自动支持是可用的,但它也不比复制更聪明(同样,b/c内部结构完全不同),所以任何自动的std::map <-> python字典转换都必须在内部执行类似上面的复制。
https://stackoverflow.com/questions/56314723
复制相似问题