#include <iostream>
#include <vector>
#include <map>
template <>
void processData<std::vector<std::map<int, std::string>>>(std::vector<std::map<int, std::string>> data) {
// 实现特定功能的代码,例如遍历并打印所有map中的键值对
for (const auto& map : data) {
for (const auto& pair : map) {
std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
}
}
}
对代码复用性的影响
- 降低复用性:全特化针对特定类型进行了完全独立的实现,原函数模板的通用代码逻辑无法在这个特化版本中复用。例如原
template <typename T> void processData(T data)
中针对一般类型的处理逻辑,在 std::vector<std::map<int, std::string>>
的特化版本里无法共用,这使得代码量相对增加,且如果原模板有更新,特化版本需要单独维护。
提高代码复用性的方法
- 提取公共代码:可以将原模板和特化版本中相同的操作提取成独立的函数或方法。例如,如果原模板和特化版本都有数据验证的操作,就把验证操作提取出来,供两者调用。
- 使用组合:在特化版本中,尽量复用已有的通用组件或算法。比如对于
std::vector<std::map<int, std::string>>
的遍历,可以复用 std::for_each
等标准库算法,而不是自己重新实现遍历逻辑。这样在保证特定功能实现的同时,尽可能利用已有的通用代码,提高复用性。