cppyy-如何调用接受集合的C ++函数?

时间:2019-05-26 15:10:39

标签: python-3.x cppyy

假设我具有以下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

如何调用此函数?

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转换在内部仍然必须像上面那样进行复制。