7
votes

Décharger Typedef

J'ai quelques types de caractères que je veux décomposer. Je fais cela pour retenir la compatibilité en arrière avec le code qui existe déjà. Y a-t-il une solution élégante (ou peut-être pas aussi élégante) à cela? J'aimerais que cela soit indépendant de la plate-forme mais s'il y a une solution de studio visuelle uniquement, cela fera également.


1 commentaires

Il n'y a pas de solution portable. @Nawaz a donné l'extension Microsoft. L'équivalent GCC est Typedef int myint __attribute __ ((altéré)); .


3 Réponses :


11
votes

dans msvc ++, vous pouvez décréter typedef code> comme ceci: xxx pré>

Le compilateur MSVC ++ générera un avertissement que myint code> est obsolète!

Et si vous voulez que le compilateur génère un message spécifique lors de la compilation d'une dépréciation TypeDEF, alors faites ceci: P>

typedef __declspec(deprecated("myint is deprecated, so most likely in the next version this myint will be missing")) int myint;


3 commentaires

faire quoi? Je pense que tu as manqué la dernière partie :))


@KitsuneyMg: Oui. C'était une faute de frappe. Merci!


MSVC a aussi #pragma obsolète , qui fonctionne aussi pour les macros.



4
votes

Si des modifications de code faciles d'un seul éteint sont autorisées, vous pouvez simplement déplacer le typedef dans un espace de noms code> dépréché code> nécessitant l'utilisation de à l'aide de l'espace de noms déprécé code> aux points qui utilisent le type qui utilise le type qui utilise le fichier .

Si ce n'est pas une option, il est possible de concocter un modèle qui, lorsqu'il est instancié, générerait un avertissement, mais je ne sais pas comment générer un tel avertissement désactivé: p> xxx pré>

donc au lieu de: p> xxx pré>

Il devient: p>

typedef TypedefHolder<int>::WhateverType WhateverType;


1 commentaires

Je pense que c'est une très bonne solution si je pouvais générer des avertissements du compilateur. Quelqu'un a-t-il des idées sur des avertissements personnalisés?



3
votes

Je sais que cette question a 10 ans, mais pour tout le monde posant toujours cette question, cette syntaxe a été prise en charge Depuis C ++ 14 :

[[deprecated("reason")]] typedef int type;


0 commentaires