Une petite question qui me taraude :
je désire faire des opérations sur des objets divers connus à la compilation, et pour ça j'utilise des template cl<T\>
Un objet parmi ceux-ci, mettons E, me sert à extirper certaines propriétés de ma classe template cl<T\>.
Dans un souci d'encapsulation, cl<\T> a des méthodes privées. cl aussi. Logique.
J'ai pourtant besoin, quand j'extrais des propriétés de cl<T\>, d'appeler des méthodes de cl<E\> qui doivent, pourtant, rester privées par ailleurs.
Je pourrais dire que toutes les classes cl<T\> sont amies les unes des autres, en déclarant
template<class T>
friend class cl { ...
Mais c'est moche, cl<T\> avec T quelconque n'a besoin d'avoir que cl<E\> comme amie, pas toutes ses cousines (on n'est pas sur facebook ici).
D'autre part, je n'ai rien à spécialiser dans cl<E\> qui me justifie de déclarer et définir ses méthodes par ailleurs : elles sont déclarées génériquement dans cl, pas très envie de dupliquer le code. À la rigueur la déclaration de la fonction, mais ça risque d'être assez pénible.
Qu'en pensez-vous ? Faut-il dupliquer toutes mes lignes de déclaration de méthodes pour cl<E\> ? Ou bien y a-t-il un design plus élégant ?
merci de vos lumières,
khivapia
PS : question subsidiaire : il y a un moyen d'échapper les < > autrement que de la façon - moche - dont je l'ai fait ?
# reponse subsidiaire
Posté par NeoX . Évalué à 2.
PS : question subsidiaire : il y a un moyen d'échapper les < > autrement que de la façon - moche - dont je l'ai fait ?
ca marche en mettant des espaces dans les < >
exemple < ma balise >
ma classe < T >
mon objet < E >
[^] # Re: reponse subsidiaire
Posté par khivapia . Évalué à 2.
# En résumé
Posté par khivapia . Évalué à 2.
# Petites précisions
Posté par khivapia . Évalué à 2.
template<class T>
class cl
{
template friend class cl;
...
};
Et apparemment il n'est pas possible de spécialiser une instantiation particulière de la classe template, qui serait amie avec toutes les autres facilement.
On peut jeter un œil vers http://www.developpez.net/forums/d811845/c-cpp/cpp/langage/a(...) et http://www.developpez.net/forums/d724627/c-cpp/cpp/communaut(...)
J'aurais dû approfondir un peu plus mes recherches avant de poster...
Cela dit si quelqu'un sait ce qu'il en est vraiment (ça n'a pas l'air si clair), et ce qu'il en sera dans la future version C++0x du langage C++ ?
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.