Pregunta

¿Es posible hacer algo a lo largo de las líneas de:

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 ) );

de una manera relativamente trivial? El único objeto que sé que puede contener un tipo es type_info y no puedo encontrar la manera de usarlo de esta manera.

Gracias, Patrick

¿Fue útil?

Solución

En general, no. Tipos realmente sólo se pueden almacenar, manipular, etc., en tiempo de compilación. Si quieres algo en tiempo de ejecución, usted tiene que convertir (por lo general a través de metaprogramming en lugar peluda) el tipo a un valor de algún tipo (por ejemplo, una enumeración).

Tal vez sería mejor si usted le dio una descripción nivel algo más alto de lo que realmente está tratando de lograr aquí - la combinación de listas de argumentos variables con un intento de "interruptor del tipo" suena como un choque de trenes a punto pasar ...

Otros consejos

No de la manera que usted podría pensar. Tipos como "int" se evalúan en el tipo de compilación. Que desea evaluar un tipo en tiempo de ejecución.

Probablemente usted quiere hacer "t" referencia de una función, o una instancia de una clase que tiene una función virtual, una para cada tipo. Esencialmente, usted quiere que el patrón del sistema, donde el comando es "formato a un valor" y las diferentes instancias del comando corresponden a los diferentes tipos que se pueden formatear.

Uso de especialización:

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

Pero con la ayuda de plantillas también se puede resolver puntero a función esperada, puntero de modo que tratar como identificador del tipo y el resultado que obtendrá deseada

Se debe observar cómo los operadores << y >> trabajan para las clases de flujo (cout y cin por ejemplo). Tal vez eso le dará una idea acerca de cómo resolver sus problemas -. Es decir, las funciones sobrecargadas

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top