zoukankan      html  css  js  c++  java
  • c++11变长参数函数模板

    By francis_hao    Mar 25,2018

     

    一个最简单的实例大概是这个样子:

    #include <iostream>
    using namespace std;

    /*
    变长参数函数模板声明*/
    template <typename... T>
    void print(T... val);

    /*
    边界条件*/
    void print(void)
    {
        cout<<"here end"<<endl;
    }

    /*
    递归的特例化定义*/
    template <typename T1, typename... T2>
    void print(T1 start, T2... var)
    {
        cout<<"sizeof ... now is: "<<sizeof... (var)<<endl;
        cout<<start<<endl;
        print(var...);
    }


    int main(void)
    {
        print(1,2,3,4);
        return 0;
    }

    其中的声明其实是没什么用的,只是告诉使用者可以按照这样的格式使用,如果不做这个声明,只保留"边界条件"和"递归的特例化定义",这样虽然可行,但是未免会造成困惑。

     

    执行结果如下:

     

    实际上,这个"变长"付出的代价还是很大的,要递归的实例出n个函数,最终再调用边界条件的函数。过程如下

     

    以上可见,这个变长参数函数模板实现的一点也不"优雅",有点强行打补丁的感觉。看看"别人家的孩子"在这个问题上是怎么做的呢?以python为例,没有对比就没有伤害~

    def printf(*arg):
        for val in arg:
            print(val)

    if "__main__" == __name__:
        printf(1,2,3,4)

     

     


    本文由 刘英皓 创作,采用 知识共享署名-非商业性使用-相同方式共享3.0中国大陆许可协议 进行许可。欢迎转载,请注明出处:
    转载自:http://www.cnblogs.com/yinghao1991/p/8644943.html

     

     

    参考

    【1】Michael Wong,IBM XL编译器中国开发团队 著 深入理解C++11:C++11新特性解析与应用 机械工业出版社:北京,2013.6

  • 相关阅读:
    Speech_recognition
    Unity3D
    Kinect
    matlab
    debian install
    menu.lst
    RStudio
    System.BadImageFormatException
    C语言期末复习划重点啦!赶上复习的末班车,祝你期末考试不挂科!
    程序员的中年危机:不是物质的匮乏,而是身份的焦虑
  • 原文地址:https://www.cnblogs.com/yinghao-liu/p/8644943.html
Copyright © 2011-2022 走看看