Question

Est-il possible de faire quelque chose le long des lignes 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 ) );

d'une manière relativement trivial? Le seul objet que je sais qui peut contenir un type est type_info et je ne peux pas travailler sur la façon de l'utiliser de cette façon.

Merci, Patrick

Était-ce utile?

La solution

D'une manière générale, non. Les types ne peuvent vraiment être stockés, manipulés, etc., au moment de la compilation. Si vous voulez quelque chose au moment de l'exécution, vous devez convertir (généralement via plutôt poilu metaprogramming) du type à une valeur de quelque sorte (par exemple, une énumération).

Peut-être que ce serait mieux si vous avez donné une description de niveau un peu plus de ce que vous êtes vraiment essayer d'accomplir ici - la combinaison de listes d'arguments variables avec une tentative de « commutateur du type » sonne comme un accident de train sur le point arriver ...

Autres conseils

Pas de la façon que vous pourriez penser. Les types sont évalués comme « int » à la compilation de type. Vous souhaitez évaluer un type à l'exécution.

Probablement que vous voulez faire référence « t » une fonction ou une instance d'une classe qui a une fonction virtuelle, un pour chaque type. Essentiellement, vous voulez que le modèle de commande, où la commande est « formater une valeur » et les différentes instances de la commande correspondent aux différents types qui peuvent être formatés.

Utiliser la spécialisation:

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

Mais avec l'aide de modèles, vous pouvez également résoudre le pointeur à la fonction attendue, afin de traiter le pointeur comme identifiant de type et vous obtiendrez résultat souhaité

Vous devriez voir comment les opérateurs de << et >> travail pour les classes de flux (et de cin par cout exemple). Peut-être cela vous donnera une idée sur la façon de résoudre vos problèmes -. Fonctions surchargées à savoir

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top