Comment puis-je déclarer une classe qui a été typée?
-
22-07-2019 - |
Question
J'ai une classe de chaîne qui, sans surprise, utilise une implémentation différente selon que UNICODE est activé ou non.
#ifdef UNICODE
typedef StringUTF16 StringT;
#else
typedef StringUTF8 StringT;
#endif
Cela fonctionne bien, mais je suis actuellement confronté à un problème de transfert de déclaration de type StringT. Comment puis-je faire cela?
Je ne peux pas faire typedef StringT;
, ce qui rend la déclaration en aval délicate. Est-il possible de faire une déclaration en aval de ce type typedef'd sans avoir à passer le code ci-dessus en haut du fichier d'en-tête?
La solution
Suivez l'exemple défini par l'en-tête standard iosfwd. Ecrivez un fichier d’en-tête qui contient cela et appelez-le StringTFwd.h
class StringUTF16;
class StringUTF8;
#ifdef UNICODE
typedef StringUTF16 StringT;
#else
typedef StringUTF8 StringT;
#endif
Au moins, cela est réutilisable et ne laide pas les en-têtes qui y font référence.
Autres conseils
Vous ne pouvez pas. (Rational: vous pouvez utiliser typedef pour définir un alias pour un type de base. Ceux-ci peuvent utiliser différentes conventions ABI en fonction du type précis).
Ne pouvez-vous pas transmettre, déclarer à la fois StringUTF16 et StringUTF8, puis utiliser votre #idef
?