Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
991 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  template de déclaration d'un copy-constructeur en friend (combo \o/)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

template de déclaration d'un copy-constructeur en friend (combo \o/)

n°1854695
0x90
Posté le 24-02-2009 à 16:45:34  profilanswer
 

J'ai une class Foo, avec des membres privées.
Je veut donner un accès aux membre privés à tout les constructeurs par copie (et uniquement à ceux-ci).
En gros un truc dans cet esprit là (sauf que ça compile pas tel quel) :

Code :
  1. class Foo {
  2.  private:
  3.  template <typename U> friend U::U(const U& );
  4.  int secret;
  5. };


Bonus point si en plus je peut constraindre un super-type sur U, et là je manque totalement d'idée pour le coup.
 
J'ai essayé des permutations classiques de typename ou template un peu partout dans la declaration, j'ai essayé de suivre la bnf de c++, rien de concluant pour le moment :/


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
mood
Publicité
Posté le 24-02-2009 à 16:45:34  profilanswer
 

n°1854697
Joel F
Real men use unique_ptr
Posté le 24-02-2009 à 16:48:07  profilanswer
 

wow, je pense plutot que c'ets pas trivial voire même pas gèrer :/
Je sors mon tas d'astuce et je reviens avec un verdict
 

n°1854699
Un Program​meur
Posté le 24-02-2009 à 17:04:00  profilanswer
 

Impossible.  On ne templatise pas une déclaration d'ami, on déclare comme ami un template (ou une instantiation, ou une fonction non template; l'erreur classique étant de vouloir déclarer comme friend une instantiation de template et de se retrouver à déclarer comme friend une fonction de même nom de mêmes paramètres, mais qui n'est pas template).

Message cité 2 fois
Message édité par Un Programmeur le 24-02-2009 à 17:04:41
n°1854701
Joel F
Real men use unique_ptr
Posté le 24-02-2009 à 17:15:05  profilanswer
 

le plus approchant serait de creer une methode public de F qui prend une ref non-const vers un type quelconque e utilisez la SFINAE pr éliminer les types qui n'ont pas le droit de 'lappeler en les reroutant vers une méthode d emême nom privée.

n°1854703
0x90
Posté le 24-02-2009 à 17:22:01  profilanswer
 

Un Programmeur a écrit :

Impossible.  On ne templatise pas une déclaration d'ami, on déclare comme ami un template (ou une instantiation, ou une fonction non template; l'erreur classique étant de vouloir déclarer comme friend une instantiation de template et de se retrouver à déclarer comme friend une fonction de même nom de mêmes paramètres, mais qui n'est pas template).


Fichtre, bon ben tant pis, jvais laisser ça en public et me débrouiller ajouter un check au runtime au cas ou :/

Joel F a écrit :

le plus approchant serait de creer une methode public de F qui prend une ref non-const vers un type quelconque e utilisez la SFINAE pr éliminer les types qui n'ont pas le droit de 'lappeler en les reroutant vers une méthode d emême nom privée.


Le pb c'est que la limite de typage c'est qu'un bonus, la plus importante pour moi c'est la limitation aux copy-constructeurs.
 
Merci pour les réponses :jap:
 


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1854718
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 24-02-2009 à 17:45:43  profilanswer
 

Un Programmeur a écrit :

Impossible.  On ne templatise pas une déclaration d'ami, on déclare comme ami un template

 
Code :
  1. class A{
  2.    template<class B> friend int j();
  3. };


from ( http://publib.boulder.ibm.com/info [...] plates.htm )

 

J'ai pas fait de C++ depuis un certain temps, mais là on templatise un ami non  :??:

 

edit : http://www.parashift.com/c++-faq-l [...] #faq-35.16  je sais pas si ça aide mais si c'est pas dans cette faq c'est mal barré en tout cas...

Message cité 1 fois
Message édité par Xavier_OM le 24-02-2009 à 17:48:06

---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
n°1854770
Joel F
Real men use unique_ptr
Posté le 24-02-2009 à 19:57:49  profilanswer
 

si je voulasi faire mon nazi, je te dirais bien que les friends de toutes façon :/

n°1854774
0x90
Posté le 24-02-2009 à 20:13:09  profilanswer
 

Ah bah clairement, si j'ai eu besoin de ça à la base c'est pour faire un truc un poil dégueulasse, c'est pas au milieu d'un beau design objet que je suis tombé dessus ;)


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1854803
Un Program​meur
Posté le 24-02-2009 à 21:00:38  profilanswer
 

Xavier_OM a écrit :


 

Code :
  1. class A{
  2.    template<class B> friend int j();
  3. };


from ( http://publib.boulder.ibm.com/info [...] plates.htm )
 
J'ai pas fait de C++ depuis un certain temps, mais là on templatise un ami non  :??:


 
Ce que j'entendais par templatiser la déclaration d'ami n'est apparemment
pas clair.
 
Ici, tu déclares une fonction template comme amie (ou si tu préfères,
toutes les spécialisations de cette fonction templat; cette dernière
formulation a l'avantage de rendre clair le fait que même si la
spécialisation est explicite, elle est amie).
 
Si on pouvait faire ce que j'entendais par templatiser la déclaration
d'ami, on arriverait à quelque chose de plus proche de ce que désirait
0x90, pouvoir en une déclaration rendre amie toute une famille de
fonctions non templates.  Si en plus les constructeurs de copie étaient
valides, 0x90 avait sa solution; sinon on avait au moins un point par où
aborder le problème pour un contournement plus ou moins efficace.  Mais on
n'en a pas.
 
Je m'en soucie pas beaucoup, j'ai beaucoup de mal à voir à quoi ça peut
servir dans une conception sensée.

n°1854830
Joel F
Real men use unique_ptr
Posté le 24-02-2009 à 22:08:05  profilanswer
 

0x90 a écrit :

Ah bah clairement, si j'ai eu besoin de ça à la base c'est pour faire un truc un poil dégueulasse, c'est pas au milieu d'un beau design objet que je suis tombé dessus ;)


 
Ca je veux bien te crorie :E


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  template de déclaration d'un copy-constructeur en friend (combo \o/)

 

Sujets relatifs
SVP, Comment inserer une template flash sur dreamweaverXSLT template
templatetemplate et functor
template et version des compilateurscopy() ne fonctionne pas car safe_mode ON
classe template avec pointeur membre sur la classetemplate template parameters
Declaration de fonctions statiques, warning multiplestemplate syntaxe
Plus de sujets relatifs à : template de déclaration d'un copy-constructeur en friend (combo \o/)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR