写一个宏函数FUNC,可以向其传入{{"a",1},{"b",2}, ...} 任意长度的vector<pair>, FUNC可以解析这个vector
时间: 2024-03-09 19:46:05 浏览: 39
22-05-28-050_ActionAndFunc参数_ValueTask(理解)
以下是一个基于宏定义的函数模板,可以接收任意长度的 `vector<pair<string, int>>` 作为参数,并输出其中的每一个元素:
```
#define FUNC(vec) \
do { \
for (auto it = vec.begin(); it != vec.end(); ++it) { \
std::cout << it->first << ": " << it->second << std::endl; \
} \
} while (0)
```
使用时,可以将需要处理的 `vector<pair<string, int>>` 传给 FUNC,例如:
```
std::vector<std::pair<std::string, int>> vec = { {"apple", 2}, {"banana", 3}, {"orange", 4} };
FUNC(vec);
```
这样,就会输出 vector 中的每一个元素。需要注意的是,宏定义的函数模板并不是一个真正的函数,因此在使用时需要注意展开后的代码是否符合要求。
如果需要传入任意长度的 `vector<pair<string, int>>`,可以使用 C++11 中的初始化列表来实现,例如:
```
std::vector<std::pair<std::string, int>> vec = { {"apple", 2}, {"banana", 3}, {"orange", 4}, ... };
FUNC(vec);
```
在这里,省略号表示可以传入任意长度的 `pair<string, int>` 对象。这种方式可以避免使用宏定义,使代码更加清晰。
阅读全文