0

是否可以按照以下方式做一些事情:

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

4 回答 4

5

一般来说,没有。类型只能在编译时真正存储、操作等。如果您在运行时需要某些东西,则必须(通常通过相当复杂的元编程)将类型转换为某种类型的值(例如,枚举)。

如果你对你真正想要在这里完成的事情给出一个更高层次的描述,也许会更好——可变参数列表与“切换类型”的尝试相结合,听起来就像火车撞车即将发生。 .

于 2010-01-22T15:28:36.587 回答
1

不是你想的那样。像“int”这样的类型在编译类型时被评估。您想在运行时评估类型。

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

于 2010-01-22T15:29:09.897 回答
1

使用专业化:

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

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

于 2010-01-22T15:30:46.523 回答
0

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

于 2010-01-22T15:31:19.970 回答