zoukankan      html  css  js  c++  java
  • C++11 新特性之 变长參数模板

    template <typename ... ARGS>
    void fun(ARGS ... args)

    首先明白几个概念
    1,模板參数包(template parameter pack):它指模板參数位置上的变长參数,比如上面样例中的ARGS

    2,函数參数包(function parameter pack):它指函数參数位置上的变长參数。比如上面样例中的args


    普通情况下 參数包必须在最后面,比如:

    template <typename T, typename ... Args>
    void fun(T t,Args ... args);//合法
    
    template <typename ... Args, typename T>
    void fun(Args ... args,T t);//非法

    有一个新的运算符:sizeof...(T) 能够用来获知參数包中打包了几个參数,注意 不是 參数所占的字节数之和。


    #include <iostream>
    using namespace std;
    
    template <typename ...Args> //Args:模板參数包
    void func(Args ...args)      //args:函数參数包
    {
    	cout << sizeof...(args) << endl;	
    }
    
    int main()
    {	
    	func(1, 2, 3, 4, 5); //输出5
    	return 0;
    }
    


    函数实例
    一个经常使用的技巧是:利用模板推导机制,每次从參数包里面取第一个元素,缩短參数包,直到包为空。

    #include <iostream>
    using namespace std;
    
    template <typename T>
    void func(const T& t)
    {
    	cout << t << endl;
    }
    
    template <typename T, typename ...Args> //Args:模板參数包
    void func(const T& t, Args ...args)      //args:函数參数包
    {
    	cout << t << endl;
    	func(args...);
    }
    
    int main()
    {	
    	func(1, 2, 3, 4, 5);
    	return 0;
    }
    


  • 相关阅读:
    JDK、JRE、JVM的区别联系
    1.1 计算机基础知识 —— 二进制
    java--面试中遇到的各种比较区别
    springMVC 运行流程
    算法--常用排序和查找
    Java面试问题总结
    dpkg:error错误求解:——重复文件触发关注
    memcpy实现
    Palindrome Number
    no matching function for call to 'sort(...),
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6801400.html
Copyright © 2011-2022 走看看