• 2.类型不一致可变参数模板与类型一致函数模板


     //类型不一致函数模板
    1
    #include <iostream> 2 #include <cstdarg> 3 using namespace std; 4 5 void show() 6 { 7 8 } 9 10 //参数类型不一致,个数不确定 11 template<typename T,typename...Args>//typename...Args可变参数 12 void show(T t, Args...args)//args如果没结束就当做T t,Args...args,如果结束则不是参数 13 { 14 cout << t << endl; 15 //递归 16 show(args...);//不能省略... 17 } 18 19 20 21 void main() 22 { 23 show(1, 1.8, "355", 'A'); 24 cin.get(); 25 }
    • 参数不一致实现printf
       1 #include <iostream>
       2 #include <cstdarg>
       3 using namespace std;
       4 
       5 //递归终止
       6 void show(const char *str)
       7 {
       8 }
       9 
      10 template<typename T,typename...Args>
      11 void show(const char *str, T t, Args...args)//args如果没结束就当做T t,Args...args,如果结束则不是参数
      12 {
      13     while (str && *str)
      14     {
      15         if (*str == '%' && *(str + 1) != '%')
      16         {
      17             str++;//指针向后移动
      18             cout << t;//打印
      19             show(++str, args...);
      20             return;
      21         }
      22         else if(*str == '%' && *(str + 1) == '%')
      23         {
      24             cout << *str++;
      25             str++;
      26         }
      27         else
      28         {
      29             cout << *str++;//跳过一个字符
      30         }
      31     }
      32 }
      33 
      34 
      35 
      36 void main()
      37 {
      38     show("%dabc%s%c%%%f", 10, "1234", '0', 2.001);
      39     cin.get();
      40 }
    • 类型一致函数模板
       1 #include <iostream>
       2 #include <cstdarg>
       3 using namespace std;
       4 
       5 template <class T >
       6 auto add(int n, T t...)
       7 {
       8     va_list arg_ptr;//开头指针
       9     va_start(arg_ptr, n);//arg_ptr,开始读取N个
      10     T res(0);//初始化为0
      11     for (int i = 0; i < n; i++)
      12     {
      13         res += va_arg(arg_ptr, T);//根据数据类型取出数据
      14     }
      15     va_end(arg_ptr);
      16     return res;
      17 }
      18 
      19 void main()
      20 {
      21     cout << add(4,1.1, 2.1, 3.2, 5.0) << endl;
      22     cin.get();
      23 }
  • 相关阅读:
    PHPCMS快速建站系列之添加单页模版
    func_num_args(),func_get_arg(),func_get_args()
    34 个使用 Raspberry Pi 的酷创意
    解决sublime text 2总是在新窗口中打开文件
    帝国cms后台不停的登录成功
    PHP正则表达式的逆向引用与子模式 php preg_replace应用
    【采集】php str_replace
    如何设置让SFTP的用户限制在某个目录下
    win2008修改最大远程桌面连接数
    mysql查询差集
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8543490.html
Copyright © 2020-2023  润新知