Aidez moi à éliminer les friend!! - C++ - Programmation
Marsh Posté le 03-04-2008 à 15:15:41
bon déjà un bon point pr utiliser du boost ^^
Après sans plus de code j'ai du mal à voire mais tes fonctions friends elles sont bien défini comme fonctions libres A L'EXTÉRIEUR de toutes classes ?
Sinon si t'as du courage : boost::proto
Marsh Posté le 03-04-2008 à 15:29:55
Non elles sont friend à l'intérieur de la classe de base EQPDEPRoperty_Base à la Barton-Nackman. J'ai pas écrit toute la classe parce que c'est long et que bon je publie pas vraiment le code sans autorisation
Marsh Posté le 03-04-2008 à 15:46:14
Soit dit en passant j'ai jeté un coup d'œil à proto (connaissait pas) et c'est cool/sympa/très frais, ça revient un peu à faire ce que j'ai fait (enfin ils font mieux). Par contre je vais pas avoir le courage/temps pour réécrire ce que j'ai fait en proto, dommage...
Marsh Posté le 03-04-2008 à 18:05:48
ElDesdichado a écrit : Non elles sont friend à l'intérieur de la classe de base EQPDEPRoperty_Base à la Barton-Nackman. J'ai pas écrit toute la classe parce que c'est long et que bon je publie pas vraiment le code sans autorisation |
si tes declarations sont dans la classe ... elles sont considérés comem mebre qqd tu enleves firends.
il faut enlever friends ET les sortir du corps de la classe
ElDesdichado a écrit : Soit dit en passant j'ai jeté un coup d'œil à proto (connaissait pas) et c'est cool/sympa/très frais, ça revient un peu à faire ce que j'ai fait (enfin ils font mieux). Par contre je vais pas avoir le courage/temps pour réécrire ce que j'ai fait en proto, dommage... |
moi même j'ai lâché mon vieux générateur de code en Expr Template fait main pour ça.
Le fait d'avoir une vrai notion de grammaire c'est enormissime
Marsh Posté le 05-04-2008 à 08:36:57
Joel F a écrit : |
Du spam pour le Viagra !
Marsh Posté le 05-04-2008 à 10:18:17
el muchacho a écrit : |
Proto pas eroto pervers !
@xilebo : oui ca réduit l'encapsulation et ca montre que le designer n'a pas compris le principe de suircharge d'opérateurs.
Il y a moins d'1 cas sur 1000 ou tu ne peut pas reecrire une fonction firends sans friends et sans perte d'expressivité (modulo des problemes d'interfacages non-intrusifs qui n'arrive que rarement)
Marsh Posté le 05-04-2008 à 10:53:51
Un article tres interessant de Scott Meyers : "How Non-Member Functions Improve Encapsulation".
http://www.ddj.com/cpp/184401197
Marsh Posté le 05-04-2008 à 11:30:26
Ace17 a écrit : Un article tres interessant de Scott Meyers : "How Non-Member Functions Improve Encapsulation". |
Merci pour le lien C'ets exactement à celui là que je penser
Citation :
|
Emphasis mine
Marsh Posté le 07-04-2008 à 11:37:30
Ah et je dois les spécifier inline pour éviter les pbs de linkages avec les .cpp . Si un jour quelqu'un cherche à faire la même chose, qui sait...
Marsh Posté le 03-04-2008 à 14:53:57
Aprés avoir lu une réponse de JoelF sur friend (il aime pas, moi non plus), je me suis dit que je pourrai peut-être éliminer définitivement mes opérateurs friend dans mon moteur de calcul (j'avais utilisé le Barton-Nackman trick, mais c'est peut-être inutile), donc voilà le problème, je veux créer des opérateurs sur des pointers qui pointent sur des objets différent mais ayant en commun un Functor sur lequel je veux opérer, le pire c'est que les objets sont templates, donc on a :
Je définis une class SingleOperator pour mes Operator agissant sur un seul pointer (de classe X) me retournant un pointer (sur R):
Bon ensuite je fais une classe pour la multiplication par un double:
Et ensuite je reprend la classe de base EQPDEPricerProperty_Base pour définir l'opérateur suivant:
Bien entendu si j'enlève le friend j'ai une belle erreur de compilation:
d:\HLML2\EQUITY\EQ\BSCHModelEQ\PDEPricerProperties.hpp(912) : error C2804: binary 'operator *' has too many parameters
d:\HLML2\EQUITY\EQ\BSCHModelEQ\PDEPricerProperties.hpp(912) : error C2333: 'EQPDEProperty_Base::operator`*'' : error in function declaration; skipping function body
Bon alors il y a toujours la solution de me dire que je fais n'importequoi (en fait c'est une possibilité tout à fait crédible), m'enfin l'idée c'est d'avoir des modules qui représente des produits financiers et de les combiner pour faire des produits structurés (sauf qu'en fait c'est un peu comme additioner des choux et des carottes) et qu'à la fin je veux faire de l'algèbre avec des pointeurs style:
Donc en fait là ca marche mais je suis loin d'être sûr que ce soit bien fait. En plus comme je suis un gros malade, je fais aussi fonctionner mes classe d'opérateurs directement sur les objets genre je veux faire des trucs du style: