Python中函数与字符串元组列表对应的C++vector类型如何定义
问题分析
Python 中mv的结构如下:
- 顶层是长度任意的列表
- 每个列表元素是二元组:第一个参数是接收
list[str]、返回None的函数,第二个是字符串组成的序列
正确C++类型定义
你之前写的std::vector<std::vector<std::string, std::function>>存在两个核心错误:
std::vector模板仅接收一个元素类型参数,不能直接放两个类型作为元素std::function必须补全函数签名的模板参数,不能直接写裸的std::function
不需要使用两个独立的vector实现,用std::pair打包每个条目的两个元素即可,两种常用实现方案如下:
方案1:匹配示例的固定长度字符串元组
如果第二个元素和示例一样固定为4个字符串,用std::array存储更贴合Python元组的固定长度特性:
#include <vector> #include <functional> #include <array> #include <string> #include <utility> // 定义函数类型别名 using FuncType = std::function<void(std::vector<std::string>)>; // 单个mv元素类型:(函数, 4个字符串的固定长度数组) using MvElement = std::pair<FuncType, std::array<std::string, 4>>; // 整个mv的类型 using MvType = std::vector<MvElement>;
用法示例:
// 对应Python的fn1实现 void fn1(std::vector<std::string> hello) { // 自定义逻辑 } int main() { MvType mv = { {fn1, {"1", "hello", "12", "no"}}, {fn1, {"w", "ufewef", "1ee", "no"}} }; return 0; }
方案2:字符串序列长度可变
如果第二个元素的字符串数量不固定,把std::array换成std::vector<std::string>即可:
using FuncType = std::function<void(std::vector<std::string>)>; using MvElement = std::pair<FuncType, std::vector<std::string>>; using MvType = std::vector<MvElement>;
内容的提问来源于stack exchange,提问作者user17411100
相关产品推荐
相关产品推荐

