对同一个数据类型,做了不同的模版封装,在调用 数据处理的时候,通过指定特定模版 保存的类型,来指定 特定的函数来处理。
参考 std::enable_shared_from_this 代码实现。
#include <iostream>
using namespace std;
class Data {
};
template <typename T>
class TemplateA {
public:
using TypeA = T;
void printA() {
cout << "TemplateA" << endl;
}
};
template <typename T>
class TemplateB {
public:
using TypeB = T;
void printB() {
cout << "TemplateB" << endl;
}
};
template <typename T>
class TemplateC {
public:
using TypeC = T;
void printC() {
cout << "TemplateC" << endl;
}
};
template <typename T>
inline void print(T* t, typename T::TypeA* = 0) {
if (t) {
t->printA();
}
}
template <typename T>
inline void print(T* t, typename T::TypeB* = 0) {
if (t) {
t->printB();
}
}
template <typename T>
inline void print(T* t, typename T::TypeC* = 0) {
if (t) {
t->printC();
}
}
inline void print(const volatile void* t, const volatile void* = 0) {
cout << "Not Template" << endl;
}
int main() {
Data data;
TemplateA<Data> a;
TemplateB<Data> b;
TemplateC<Data> c;
print(&data);
print(&a);
print(&b);
print(&c);
getchar();
return 0;
}