存储类型的类型以处理变量参数列表

时间:2010-01-22 15:23:11

标签: c++ typeinfo variadic-functions

是否可以采取以下措施:

type t = int;//this would be a function which identifies what type the next argument is
if( t == int )
    printf( "%d", va_arg( theva_list, t ) );

以相对微不足道的方式?我知道唯一可以保存类型的对象是type_info,我无法理解如何以这种方式使用它。

谢谢, 帕特里克

4 个答案:

答案 0 :(得分:5)

一般来说,没有。类型只能在编译时真正存储,操作等。如果你想在运行时使用某些东西,你必须将类型转换(通常通过相当毛茸茸的元编程)到某种值(例如,枚举)。

如果你对这里你真正想要完成的事情进行更高层次的描述可能会更好 - 可变参数列表与尝试“开启类型”的组合听起来就像火车相撞发生...

答案 1 :(得分:1)

不是你想象的方式。类似“int”的类型在编译类型时计算。您想在运行时评估类型。

可能你想让“t”引用一个函数,或者一个具有虚函数的类的实例,每个类型一个。基本上你需要命令模式,其中命令是“格式化值”,命令的不同实例对应于可以格式化的不同类型。

答案 2 :(得分:1)

使用专业化:

  void smart_print(int t)
  {
     printf("%d", i);
  }
  void smart_print(double f)
  {
     printf("%g", f);
  }

但是借助模板,您还可以解析指向期望函数的指针,因此将指针视为类型的标识符,您将获得所需的结果

答案 3 :(得分:0)

您应该查看<<>>运算符如何为流类(例如cout和cin)工作。也许这会让你了解如何解决你的问题 - 即重载函数。