相关概念:baidu 一下
直接上干货,本次使用函数模板演示
简单了解一下,心里有个概念,为以后做铺垫
1、一般的函数模板#include// 一般的函数模板 template void add(T a, T b) { std::cout << (a + b) << std::endl; } int main(int argc, char **argv) { add(1, 2); add(1.4, 2.5); return 0; }
2、模板全特化
就是把 T 特化成 int
特化,特化,就是做特别处理嘛
#include// 一般的函数模板 template void add(T a, T b) { std::cout << (a + b) << std::endl; } // 全特化函数模板 template <> void add(int a, int b) { std::cout << "全特化版本:" << (a + b) << std::endl; } int main(int argc, char **argv) { add(1, 2); // 这里会使用全特化版本 add(1.4, 2.5); return 0; }
3、模板偏特化
除了 全特化 以外的都是 偏特化
所以,template <> 中的 <> 不能为空
这里改成使用类模板演示
#include// 一般的泛化版本 template class A { public: void add(T1 a, T2 b) { std::cout << (a + b) << std::endl; } }; // 偏特化版本 template class A { public: void add(T1 a, T1 b) { std::cout << "偏特化版本:" << (a + b) << std::endl; } }; int main(int argc, char **argv) { // 一般泛化版本 A a; a.add(1, 3); // 偏特化版本 A b; b.add(1, 3); return 0; }
还有一种指针类型的
#include// 一般的泛化版本 template class A { public: void add(T1 a, T2 b) { std::cout << (a + b) << std::endl; } }; // 偏特化版本 template class A { public: void add(T1 a, T1 b) { std::cout << "偏特化版本:" << (a + b) << std::endl; } }; // 偏特化版本(指针类型) template class A { public: void add(T1* a, T2* b) { std::cout << "偏特化版本(指针):" << (*a + *b) << std::endl; } }; int main(int argc, char **argv) { // 一般泛化版本 A a; a.add(1, 3); // 偏特化版本 A b; b.add(1, 3); // 偏特化版本(指针类型) int d1 = 1; char d2 = 3; A c; c.add(&d1, &d2); return 0; }



