首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cppyy -如何调用接受集合的c++函数?

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

Stack Overflow用户
提问于 2019-05-26 23:10:39
回答 1查看 157关注 0票数 1

假设我有以下C++函数:

代码语言:javascript
复制
int summap(const map<int,int>& m) {
    ...
}

我尝试使用cppyy从Python调用它,方法是发送一个dict:

代码语言:javascript
复制
import cppyy
cppyy.include("functions.hpp")
print(cppyy.gbl.summap({55:1,66:2,77:3}))

我得到一个错误:

代码语言:javascript
复制
TypeError: int ::summap(const map<int,int>& v) =>
    TypeError: could not convert argument 1

如何调用此函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-29 06:12:05

Python的dict和C++的std::map (两者的内部结构完全不同)之间没有关系,所以这需要一个转换,目前cppyy中没有自动转换,所以这样做:

代码语言:javascript
复制
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字典转换都必须在内部执行类似上面的复制。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56314723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档