下面代码仅仅作为例子:
#include <iostream>
#include<string>#include<vector>
using namespace std;
//主模板
template<typename T>
class List {
public:
void append(T const& elemt){
vt.push_back(elemt);
}
inline size_t length() const{
vt.size();
}
T element(int N){
return vt[N];
}
private:
vector<T> vt;
};
//全局特化: 针对指针类型 list的实现细节
template<>
class List<void*> {
public:
void append (void* p){
vv.push_back(p);
}
inline size_t length() const {
return vv.size();
}
void* element(int N){
return vv[N];
}
private:
vector <void*> vv;
};
//局部特化: 指针类型 调用的 局部特化模板
template <typename T>
class List<T*> {
public:
void append(T* p) {
impl.append(p);
}
size_t length() const {
return impl.length();
}
T* element(int N){
return (T*)impl.element(N);
}
private:
List<void*> impl;
};
int main(int argc, char *argv[]){
double a=0.00,b=1.01,c=2.02;
li.append(a);
li.append(b);
li.append(c);
for(int i =0; i<li.length(); i++){
cout<< li.element(i) << endl;
}
List<double*> lip;
double d=0.00,e=1.01,f=2.02;
lip.append(&d);
lip.append(&e);
lip.append(&f);
for(int i =0; i<lip.length(); i++){
cout<< *lip.element(i) << endl;
}
return 0;
}