2010-01-22 18 views
0

type de type Est-il possible de faire quelque chose le long des lignes de: d'une manière relativement trivialstockage pour les listes de traitement des arguments variables

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

? Le seul objet que je sais qui peut contenir un type est type_info et je ne peux pas m'expliquer comment l'utiliser de cette manière.

Merci, Patrick

+1

Si vous avez besoin de connaître le type lors de l'exécution, il y a généralement un problème avec votre conception. Une meilleure explication du problème que vous essayez de résoudre peut aider. –

Répondre

5

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 une métaprogrammation plutôt velue) le type à une valeur quelconque (par exemple, une énumération). Peut-être que ce serait mieux si vous donniez une description de niveau un peu plus élevé de ce que vous essayez vraiment d'accomplir ici - la combinaison de listes d'arguments variables avec une tentative de "type d'allumage" ressemble à un accident de train. se produire ...

+0

N'oubliez pas qu'il y a RTTI qui permet un traitement basé sur le type. – Skizz

+0

Pensée ainsi. Vraiment je ne veux pas le décrire car je suis gêné J'ai jamais eu l'idée, mais cela m'aurait fait gagner du temps si cela avait été possible. Merci – Patrick

1

Pas comme vous pourriez le penser. Des types comme "int" sont évalués au type de compilation. Vous voulez évaluer un type lors de l'exécution.

Vous voudrez probablement faire référence à une fonction "t", ou une instance d'une classe qui a une fonction virtuelle, une pour chaque type. Essentiellement, vous voulez 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.

1

Utilisation 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 le résultat souhaité

0

Vous devriez regarder comment les opérateurs << et >> travaillent pour les classes de flux (cout et cin par exemple). Cela vous donnera peut-être une idée de la façon de résoudre vos problèmes, c'est-à-dire des fonctions surchargées.