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?

Était-ce utile?

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 ?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top