est-il possible d'obtenir la typename d'une variable de membre? Par exemple: merci p> p>
4 Réponses :
Peut ne pas être exactement ce que vous recherchez, mais une solution éventuellement meilleure à long terme: Ce n'est pas exactement ce que vous voulez, mais cela nous permet de Masquer le type de mise en œuvre de C :: Valeur Code> Pour que nous puissions le changer ultérieurement, ce que je soupçonne que vous êtes après. p> p>
Malheureusement, je ne contrôle pas la structure, qui provient de la bibliothèque externe et de ne pas avoir de valeur_type ou d'équivalent
Est-il possible alors qu'il n'est pas censé être accessible?
@stefanb Bibliothèque (Cuda) a une interface C. J'essaie de le rendre approprié pour le code de modèle.in principe, je peux écrire des traits de type si rien d'autre ne fonctionne.
Seulement si vous êtes bien avec le traitement du type dans une fonction il ne fonctionnera pas avec les membres de données de référence. C ++ 0x permettra déclinger (C :: Value) code> pour le faire plus facilement. Non seulement cela, mais cela permet
déclinger (c :: valeur + 5) code> et toute autre truc d'expression fantaisie dans le
déclinger code>. GCC4.5 le soutient déjà. P> p>
Je suppose que c'est le meilleur moment pour demander. Savez-vous pourquoi ils ont choisi déclinger code> sur
typeof code>?
typeof code> est "correspondant"
Tailleof code>,
déclinger code> est laid et ne lit pas aussi! :(
@Gman - Dessinaison aléatoire: car de nombreux compilateurs utilisent probablement typeof code> comme une extension spécifique au compilateur, et l'introduisant comme un mot-clé briserait probablement beaucoup de code, comme le type de type
standard de "code> > serait inévitablement différent du type
spécifique au compilateur de code>.
@Gman J'ai le même soupçon que Chris - je pense que c'est en grande partie une question de compatibilité. AS l'exemple, déclinger (c :: valeur) code> sera un type différent de celui de
déclinger ((valeur C :: valeur)) code>. Mes tests idiotes indiquent que
typeof code> sur gcc
int code> dans les deux cas.
@Chris et litb: Ah, cela a du sens. Puis-je demander pourquoi ce serait des types différents et ce qu'ils sont? C'est terriblement déroutant.
@Gman je suis d'accord, les règles sont i> déroutant, j'ai bien peur :) Si vous avez un accès aux membres de la classe (PTR-> MEM ou obj.mem) ou une expression d'identité (qualifiée ou non qualifiée Nom, comme C :: Valeur ou Valeur) comme opérande, alors déclinger code> donnera le type de cette entité. Par exemple, une référence produira un type de référence. Si ce n'est pas le cas, si l'opérande est un appel de fonction (éventuellement parenthèses) ou un appel implicite à un opérateur surchargé, alors
déclinger code> donnera le type de retour de celui-ci (donc
int const f ( ) code> et
déclinger (f ()) code> rendements
int const code>). ...
Sinon, vous obtenez le type de l'expression, mais comme référence si l'expression est une lvalue. Donc, si l'opérande est (c :: valeur) code> au lieu de
c :: valeur code> vous obtenez
int & code>. Pour l'exemple d'appel de la fonction, si l'opérande est
déclinger (0, f ()) code> vous obtenez
int code> (car les rapales de type non de classe ne sont pas qualifiés de Const). J'espère que cela effraye la question.
Yeesh D: On dirait que j'ai une lecture à faire. Merci d'avoir expliqué cela.
pas en C ++ 03. C ++ 0x introduit Certains compilateurs ont un Si vous allez bien avec Boost, ils ont un bibliothèque pour celui-ci: p> déclenle code>:
typeof code> extension, cependant: p>
Travaille pour moi. Assurez-vous de ne pas désactiver les extensions avec un commutateur.
Cela dépend de ce que vous devez faire, mais vous feriez quelque chose comme: