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: