学过python的人应该都知道,这个对于python来说很好实现而且传入未知个数的参数也是比较常见的,比如爬虫里面经常出现这个情况但是c++呢???需要用到initializer_list,我没拼错额
正文:
举个例子,我们要编写一个处理错误信息的函数,目的是能够整齐划一地处理所有错误
因为C++有许多类型的错误,所以在调用错误输出函数时传递的参数也不相同
为了能编写出可以处理不同实参的函数,早在C++的标准中规定
如果所有实参类型相同,可以使用一个名为initializer_list的标准库来处理多个实参,如果实参不同,可以通过可变参数模板实现
可变参数模板(C++11)_tony__lin-CSDN博客_可变参数模板(博客)
C++可变参数模板_小白将-CSDN博客_c++ 可变参数模板(博客)
我直接上代码啦,在注释里面解释(有点长)
这些先别看,先看代码
先上一个不含注释的
#include <vector>
using std::vector;
#include <string>
using std::string;
#include <iostream>
using std::cout;
using std::endl;
#ifdef INITIALIZER_LIST
#include <initializer_list>
using std::initializer_list;
#endif
#include <sstream>
using std::ostringstream;
//错误处理
struct ErrCode
{
ErrCode(int i) : num(i) {}//初始化ErrCode类型的对象
string msg()
{
ostringstream s;
s<<"ErrCode"<<num;
return s.str();
}
int num;
};
#ifdef INITIALIZER_LIST
//需要一个错误代码和字符串列表的版本
voiderror_msg(ErrCode e,initializer_list<string> i1)
{
cout<<e.msg()<<":";
for(const auto &elem :i1)
{
cout<<elem<<" ";
}
cout<<endl;
}
#else
void error_msg(ErrCode e,const string *beg,const string* end)
{
cout<<e.msg()<<": ";
while(beg!=end)
{
cout<<*beg++<<" ";
}
cout<<endl;
}
#en