這里是其中一個場景, 想了解其他的請繞行。
class 模板特例化:
template<typename T, int v1> class A { public: A(T value) { a = value * v1; } T a = 0; }; template<typename T> class A<T, 10> { public: A(T value) { a = value * 10; } T a = 0; }; template<int v1> class A<int, v1> { public: A(int value) { a = value * v1; } int a = 0; };
function 模板特例化:
報錯 非法使用顯式模板參數 情景如下:
template <typename T, int v1, int v2> int haha(T a) { return a * v1 * v2; } template <int v1, int v2> int haha<int, v1, v2>(int a) { return a * v1 * v2; }
理解是函數是多參數的情景, 當某個類型特例化, 那就是那個參數類型定了, 無需套用之前的模板:
template <typename T, int v1, int v2> int haha(T a) { return a * v1 * v2; } template <int v1, int v2> int haha(int a) { return a * v1 * v2; }