在学习C++相关源代码时,经常会周旋于各种模板及其特例化中,在此对特例化的个人理解加以记录,有错误和不足之处还请大家指正。
使用模板可以让我们将函数或类用于多种模板实参,但实际情况下,单一模板的实例化并不一定能够适合所有可能的模板实参,比如下面这种情况。(以下代码只是为了说明特例化,并无实际意义)。
template <typename Type1, typename Type2>
class CNoOperatorAdd
{
public:
Type1 member_int;
Type2 member_string;
CNoOperatorAdd() : member_int(1),member_string("a") {};
};
template <typename Type1, typename Type2>
int Add(Type1 a, Type2 b)
{
return a + b;
}
template <>
int Add(typename CNoOperatorAdd<int,string> a, typename CNoOperatorAdd<int,string> b)
{
return a.member_int + b.member_int;
}
int main()
{
int i = 2;
int j = 4;
CNoOperatorAdd<int, string> ci;
CNoOperatorAdd<int, string> cj;
cout << Add(2, 4) << endl;
cout << Add(ci, cj) << endl;
getchar();
return 0;
}
Add(2 , 4)可以正常编译,