可变参类模板的特化(偏特化和全特化)

#include<iostream>
using namespace std;

/*泛化版本*/
template<typename ...args>
class A {
    
    
public:
    A()
    {
    
    
        printf("泛化版本%p\n", this);
    }
};

/*偏特化版本,拆开成一个和一包*/
template <typename first, typename... args>
class A<first,args...> {
    
    
public:
    A()
    {
    
    
        printf("特化版本<first,args...>%p\n", this);
    }
};

/*偏特化版本,拆成只有一个*/
template <typename args>
class A<args> {
    
    
public:
    A()
    {
    
    
        printf("特化版本A<args>%p\n", this);
    }
};

/*偏特化版本,拆成两个*/
template <typename args1,typename args2>
class A<args1,args2> {
    
    
public:
    A()
    {
    
    
        printf("特化版本A<args1,args2>%p\n", this);
    }
};

/*特殊的特化版本,像全特化,但是并不是全特化
可变参类模板没有全特化*/
template<>
class A<int> {
    
    
public:
    A()
    {
    
    
        printf("特殊的A<int>%p\n", this);
    }
};

int main(int argc, char* argv[])
{
    
    
    A<int> a1;
    A<int,float> a2;
    A<int, float, double> a3;
    A<> a4;

    return 0;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_38158479/article/details/121445577