模板的特化与偏特化
2020/12
29
14:12
类模板特化语法为
template<typename T1, typename T2, typename T3>
struct TBase
{
}
// 偏特化:T1/T2/ST
template<typename T1, typename T2>
struct TBase<T1, T2, specializationsType>
{
}
// 偏特化:T1/ST/T3
template<typename T1, typename T3>
struct TBase<T1, specializationsType, T3>
{
}
// 在声明时,需要在偏特化template<>中,把偏特化的类去掉
函数不存在偏特化,只能全特化,以下为例子:
#include <stdio.h>
template<typename T1, typename T2>
int foo(T1 a, T2 b)
{
return 0;
}
template<>
int foo<int, int>(int a, int b) // A
{
return 100;
}
template<typename T1, typename T2>
int foo(int a, int b) // B
{
return 300;
}
// 其中A和B为两个不同的函数体,所以,下面调用,第1个通过,第2个触发编译器异常
foo(100, 100);
foo<int,int>(100,100);