在C++模板编程中,特化、偏特化和全特化是用来为特定类型或类型组合提供专门实现的技术。它们主要用于类模板和函数模板,用于在模板的通用性和特定性之间找到平衡。 函数模板 // 模板函数 template <typename T1, typename T2> void fun(T1 a, T2 b) { cout << "模板函数\n"; } // 全特化 template <> void fun(int, char) { cout << "全特化\n"; } // 这不是偏特化,实际只是函数重载? template <typename T2> void fun(char a, T2 b) { cout << "重载: " << a << " -- " << b << endl; } // 使用 int main(int argc, char *argv[]) { TestTemplate::fun(1, 2); TestTemplate::fun(1, '2'); TestTemplate::fun('1', 2); return 0; } 输出: 模板函数 全特化 重载: 1 -- 2 类模板 template <typename T1, typename T2> class Test { public: Test(T1 i, T2 j) : a(i), b(j) { cout << "模板类" << endl; } private: T1 a; T2 b; }; template <> class Test<int, char> { public: Test(int i, char j) : a(i), b(j) { cout << "全特化" << endl; } private: int a; char b; }; template <typename T2> class Test<char, T2> { public: Test(char i, T2 j) : a(i), b(j) { cout << "偏特化\n"; } private: char a; T2 b; }; void TestTemplate() { Test<double, double> t1(0.1, 0.2); Test<int, char> t2(1, 'A'); Test<char, bool> t3('A', true); } 输出: 模板类 全特化 偏特化