Disons que j'ai la pièce de code suivante (une simple hiérarchie de classe CRTP). Je souhaite tapedef le type de classe de base pour me sauver taper (dans mon code actuel, j'utilise le type de classe de base plus d'une fois et la classe de base prend plusieurs paramètres de modèle), et j'ai besoin de lier d'amitié la classe de base car je veux garder La mise en œuvre privée. clang dit: p> Comment puis-je résoudre ce problème? J'ai remarqué que je pouvais simplement taper le tout simplement pour la déclaration de classe d'amis et cela fonctionne bien, mais même un petit peu de code dupliqué me fait sentir mal à l'aise, alors je cherche une solution "appropriée" plus élégante . p> p>
3 Réponses :
Je crois que cela n'est pas possible avec C ++ 03, mais était ajouté à C ++ 11 dans lequel vous pouvez simplement omettre le mot-clé code> code>:
Je reçois la même erreur sur une ligne qui n'utilise pas d'ami, mais une énumération statique ..: statique Enum cglinecap fl_quartz_line_cap_ = kcglinecapbutt; code> toute suggestion sur la manière de résoudre ce problème?
Activer C ++ 11 Seulement et utiliser Vous ne pouvez pas utiliser de classe d'amis sur TLECDEF en C ++ 03. P> Un spécificateur de type élaboré doit être utilisé dans une déclaration d'ami pour
une classe (101) p>
101) La clé de classe du spécificateur de type élaboré est requise. P>
blockQuote> ami BaseType code>
Vous pouvez réellement le faire en C ++ plus tôt que C ++ 11, mais il nécessite une solution de contournement assez élaborée (HAHA), le long des lignes de, 1er déclarer cette "assistante": Ensuite, votre déclaration de votre ami: p>