给出一个具有可变数量参数的函数......
void function(int count,...)
{
...
}
如何区分指针和数据变量...... 鉴于我事先并不知道这些类型。 即
char *p=new char();
*p='v';
function(2,5,p);
如何知道p是否是指针,以便可以在函数内部进行处理... 即如果它是一个指针,我会使用* p else only p等 因此,要设计的函数将成为一个通用函数,使用指针和数据。
任何类型的答案都可以接受.. 提前谢谢你......
答案 0 :(得分:2)
非常好的解释 HERE
答案 1 :(得分:2)
使用变量参数是不可能的。调用va_arg时必须知道参数的类型。
执行此操作的一种可能方法是传递指向自我描述数据的指针,如variants。
答案 2 :(得分:0)
简短的回答是,你不能。变量参数列表没有类型信息。这就是printf
和scanf
等函数需要格式字符串
printf("%s %d\n","here is the magic number",42);
您需要记录调用函数的方式,或者使用printf
之类的格式字符串。
变量参数列表在C ++中是支持但不是面向对象或类型安全的,并且有更好的选择。一种C ++替代方法是使用与cout一起使用的<<
运算符等构造(C ++等价于printf
)
cout << "here is the magic number" << ' ' << 42 << endl;
您可以为此类
实现此类class VarArgs
{
public:
VarArgs & operator << (int value)
{
//do something
return *this;
}
VarArgs & operator << (char value)
{
//do something
return *this;
}
VarArgs & operator << (char *value)
{
//do something
return *this;
}
//etc.
};