如何将两个Python字典传递给C++函数以map接收
我想在Python中调用一个C++的函数,这个函数需要两个Python字典作为参数,这两个字典的键对应的值是列表,像这样:
a = {'str1': [1, 2, 3], 'str2': [4, 5, 6]}
b = {'str3': [7, 8, 9], 'str4': [10, 11, 12]}
cppFunction(a, b)
在C++中,这个函数会把这两个字典存储到两个类型为 map<string, vector<int>>
的变量里。我该怎么做呢?我需要使用boost库吗?
谢谢,
Qingkun
2 个回答
1
如果你想把Python的参数传给C/C++的函数,而这些参数在C/C++中没有直接对应的类型(比如不是字符串或数字),那么最好的办法就是把它们当作通用的Python对象来处理,获取它们的指针。
这就意味着你的C++扩展代码需要像Python解释器那样以通用的方式来处理这些对象。这包括查找它们的方法,并调用这些方法来操作它们的内容,比如获取、设置或删除它们的内容,特别是当它们是容器对象时,比如lists
(列表)、dicts
(字典)等。然后,你的扩展可以利用这些信息来构建你想要的具体C++ map<>
模板类型。
开源项目PyCXX提供了一些工具,可以让你更容易地编写C++的Python扩展,同时也提供了处理Dict
和List
参数的现成C++类。更棒的是,你可以把它们当作抽象的Sequence
(序列)和Mapping
(映射)对象,这样你的扩展代码就能处理其他实现了相同接口的Python类型。