#include <iostream>
#include <queue>
#include "stdarg.h"
using namespace std;
struct Params
{
enum ParamsType{NILL,INT,CHAR,DBL};
ParamsType type;
union
{
int noParams;
int intParams;
char charParams[256];
double doubleParams;
};
static const Params NullParams;//声明,空参数,使用默认的构造函数Params();从而他的type为NILL;
Params(){ noParams=0;type = NILL; }//默认构造函数
explicit Params(int p){ intParams = p; type = INT;}
explicit Params(char* p){ strcpy(charParams,p); type = CHAR;}
explicit Params(double p){ doubleParams = p; type = DBL;}
inline bool isNull()
{
return (type == NILL)?true:false;
}
};
const Params Params::NullParams;
std::queue<Params> PassValue(int count = 0,...)
{
std::queue<Params> pList;
if(count<=0)
return pList;
va_list arg_ptr;//va_list 类型是在stdarg.h头文件中定义的,该指针用来依次指向各个实参。
va_start(arg_ptr,count);//va_start(arg_ptr,count); 这个宏的第二个实参是函数形参列表中活力号前面固定形参的名称,用来确定第一个可变实参的位置。
for (int i=0;i<count;i++)
{ //var_arg宏返回arg_ptr指向的位置存储的实参值,并使arg_ptr递增,
//以指向下一个实参值。va_arg宏的第二个实参是第一个实参的类型,
pList.push(va_arg(arg_ptr,Params));
}
va_end(arg_ptr);//va_end宏将我们传递给它的实参--va_list类型的指针复位成空值。
return pList;
}
void main()
{
std::queue<Params> p( PassValue(2,Params(111),Params("222")) );
Params a1 = p.front();
cout << a1.intParams <<endl;
p.pop();
Params a2 = p.front();
cout << a2.charParams <<endl;
p.pop();
}
c++ 参数个数不确定
最新推荐文章于 2022-11-22 21:17:09 发布