欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

C++使用可变参数

来源:本站整理 作者:zmh009_NAME 时间:2017-01-03 TAG: 我要投稿

今天要说的是C++使用可变参数的方式,包括std::initializer_list模板类、可变参数模板。
    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;
}
此处实参可以不使用{... , ... , ...}方式传入。
可变参数模板有另一个主要用处,可以用于模板转发。
 

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载