假设我具有以下C ++函数:
int summap(const map<int,int>& m) {
...
}
我尝试通过发送dict从python使用cppyy调用它:
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
如何调用此函数?
答案 0 :(得分:1)
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 dict转换在内部仍然必须像上面那样进行复制。