可变参类模板参数包展开(通过递归组合关系展开参数包)

#include<iostream>
using namespace std;

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


template <typename first,typename... args>
class A<first,args...> {
    
    
public:
    A(first one, args... part)
        : m_o(part...), m_i(one)
    {
    
    
        std::cout << m_i << std::endl;
        printf("偏特化版本this = %p\n", this);
    }
    first m_i;
    A<args...> m_o; //组合关系
};


int main(int argc, char* argv[])
{
    
    
    A<int, int, int> obj(1, 2, 4);
    return 0;
}

/*类似这种感觉,类与类之间的组合关系
class A {
public:
   A(){}
};
class A<int> {
public:
    A(){}
    A<> m_o;
};
class A<int,int> {
public:
    A(){}
    A<int> m_o;
};
class A<int,int,int> {
public:
    A(){}
    A<int,int> m_o;
};
*/

在这里插入图片描述

猜你喜欢

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