2017年11月12    欢迎访问软件培训网!
  网站首页     java     安卓技术     .net     网络技术     linux技术     php技术     windows技术     软件测试  
C++使用可变参数
作者:郑州电脑学校    发布时间:2017-01-05 15:43:54     信息来源:软件培训网
  •  今天要说的是C++使用可变参数的方式,包括std::initializer_list模板类、可变参数模板。BWS软件培训网

        std::initializer_list()
        是C++11新标准引入的初始化的列表,是一个模板类,可通过{...}形式传入并构造,这里介绍使用可变参数的情况:
    #include  
    #include 
    #include 
     
     
    using std::string;
    using std::cout;
    using std::endl;
    templatetypename T> using initializer_list = std::initializer_list;
     
     
    void func(initializer_listconst string> L)
    {
         
        cout 
         
         
        for (auto a = L.begin(); a != L.end(); ++a)
        {
            cout " ";
        }
        cout 
    }
     
    int main()
    {
        func({"123","asd","zmh"});
        return 0;
    }
    有个特点是初始化列表存储的类型是固定的,如果传入不可支持类型转换则编译错误
        可变参数模板
        可变模板参数是C++11新标准引入的,是可接收可变数目参数模板的模板函数和模板类,可变数目的参数是参数包:模板参数包(template)、函数参数包(T... type),与初始化列表不同的是可以接收不同类型的参数,但由于是模板则不支持分离编译,且用法较复杂,这里介绍可变参数模板的模板函数: 
        
    #include 
    using std::cout;
    using std::endl;
    using std::string;
     
     
    template typename T>
    void func(const string &s1,const T &s2)
    {
        cout " " 
    }
     
     
    template typename... T> 
    void func(const string &s, const T&... t)
    {
        cout sizeof...(t) 
        cout " ";
         
        func(t...); 
    }
    #include "a.h"
     
    int main()
    {
        func("123","asd","zmh"); 
        return 0;
    }
    此处实参可以不使用{... , ... , ...}方式传入。
    可变参数模板有另一个主要用处,可以用于模板转发。

  • 上一篇:国内首个CTFcrack框架开发流程 下一篇:郑州网络工程师培训学校哪家好呢?
软件培训| java培训 | .net培训 |安卓培训|网站地图
关于我们 - 联系方式  友情链接 Copyright @ 2010-2017 郑州翔天信鸽科技有限公司 All Rights Reserved 版权所有  
郑州翔天信鸽: 郑州市文化路90号河南财经政法大学文南校区1号楼  招生热线:0371-63383522 豫ICP备10022989号-4
就业合作:北大青鸟郑州翔天信鸽常年为企业推荐优秀毕业学员   就业合作热线:0371-63610601
  • QQ交谈