• c++11 可变参数模板类


    c++11 可变参数模板类

    #define _CRT_SECURE_NO_WARNINGS
    
    #include <iostream>
    #include <string>
    #include <vector>
    #include <map>
    
    // 在C++11之前,类模板和函数模板只能含有固定数量的模板参数。C++11增强了模板功能,允许模板定义中包含0到任意个模板参数,这就是可变参数模板。
    
    // 可变参数模板类 继承方式展开参数包
    // 可变参数模板类的展开一般需要定义2 ~ 3个类,包含类声明和特化的模板类
    template<typename... A> class BMW{};  // 变长模板的声明
    
    template<typename Head, typename... Tail>  // 递归的偏特化定义
    class BMW<Head, Tail...> : public BMW<Tail...>
    {//当实例化对象时,则会引起基类的递归构造
    public:
        BMW()
        {
            printf("type: %s
    ", typeid(Head).name());
        }
    
        Head head;
    };
    
    template<> class BMW<>{};  // 边界条件
    
    // 模板递归和特化方式展开参数包
    template <long... nums> struct Multiply;// 变长模板的声明
    
    template <long first, long... last>
    struct Multiply<first, last...> // 变长模板类
    {
        static const long val = first * Multiply<last...>::val;
    };
    
    template<>
    struct Multiply<> // 边界条件
    {
        static const long val = 1;
    };
    
    
    void mytest()
    {
        BMW<int, char, float> car;
        /*
        运行结果:
            type: f
            type: c
            type: i
        */
    
        std::cout << Multiply<2, 3, 4, 5>::val << std::endl; // 120
    
    
        return;
    }
    
    
    int main()
    {
        mytest();
    
        system("pause");
        return 0;
    }
  • 相关阅读:
    新的知识点来了-ES6 Proxy代理 和 去银行存款有什么关系?
    JavaScript中一种全新的数据类型-symbol
    箭头函数的this指向问题-一看就懂
    ES6中对函数的扩展
    ES6中对象的扩展
    ES6中对数组的扩展
    ES6中对数值的扩展
    UWP --- Display Content 显示基础内容
    ViewBag & ViewData
    Bubble Sort冒泡排序
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7787514.html
Copyright © 2020-2023  润新知