区分指针和数据变量

时间:2011-10-04 03:29:59

标签: c++ pointers

给出一个具有可变数量参数的函数......

void function(int count,...)
{
...
}

如何区分指针和数据变量...... 鉴于我事先并不知道这些类型。 即

char *p=new char();
*p='v';
function(2,5,p);

如何知道p是否是指针,以便可以在函数内部进行处理... 即如果它是一个指针,我会使用* p else only p等 因此,要设计的函数将成为一个通用函数,使用指针和数据。

任何类型的答案都可以接受.. 提前谢谢你......

3 个答案:

答案 0 :(得分:2)

非常好的解释 HERE

答案 1 :(得分:2)

使用变量参数是不可能的。调用va_arg时必须知道参数的类型。

执行此操作的一种可能方法是传递指向自我描述数据的指针,如variants

答案 2 :(得分:0)

简短的回答是,你不能。变量参数列表没有类型信息。这就是printfscanf等函数需要格式字符串

的原因
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.
};