模板的特化与偏特化

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);