c++模板编程里面有一个东西叫 标签分发
这个东西的作用是实现静多态
c++ advance, distance等 很多函数都是基于该技巧实现的
下面基于该技巧实现一个函数
该函数的作用是输出数组
但是我们知道 char buffer[n] 数组, 我们大可不必一个一个 cout 的
下面实现一个萃取,针对 char 特化, 这个萃取的可用实现方式众多
#include <iostream>
#include <vector>
#include <memory>
#include <type_traits>
using namespace std;
// c++模板编程-模板静多态-标签分发实例
template<typename T>
struct is_char : public false_type {
};
template<>
struct is_char<char> : public true_type {
};
template<typename T>
struct isChar : public is_char<typename remove_cv<T>::type> {
};
// 非 char数组输出
template<typename T, size_t N>
void printArrayImp(T(&arr)[N], std::false_type) {
cout << "false_type" << endl;
for (int i = 0; i < N; ++i) {
cout << arr[i] << " ";
}
cout << endl;
};
// char 数组输出
void printArrayImp(char *arr, std::true_type) {
cout << "true_type" << endl;
cout << arr << endl;
}
// 统一接口
template<typename T, size_t N>
void printArray(T(&arr)[N]) {
printArrayImp(arr, isChar<T>());
};
int main() {
// int 数组
int ah[12];
for (int i = 0; i < 12; ++i) {
ah[i] = i;
}
printArray(ah);
// char 数组
char bh[10];
char a = 'a';
for (int j = 0; j < 10; ++j) {
bh[j] = (char) (a + j);
}
printArray(bh);
string sh[10];
for (int k = 0; k < 10; ++k) {
sh[k] = "rank_";
}
printArray(sh);
}