Fonction transform dans classe mère avec def dans classe fille

Vlntn Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
BOB-XM2 Messages postés 180 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

Voici mon premier message sur commentcamarche. Mon problème est simple, j'ai une classe mère qui possède un vector en champ protégé et je souhaite définir une méthode qui utilise la fonction transform de la STL. Le code de cette méthode est quasiment le même pour toutes mes classes filles, la seule chose qui change est la fonction que prend transform en parametre. J'aimerai donc pouvoir définir cette fonction dans mes classes filles. C'est ici que ça bloque et malgré différents essais ça ne marche pas. Je vous présente deux petits exemples pour illustrer mon propos où dans les deux ça ne marche pas :

#include <vector>
#include <algorithm>
 
using namespace std;
 
struct mere {
	mere(int n) : value(n) {}
	virtual int modif(int ) =0;
	void prix() {
		transform(value.begin(), value.end(), value.begin(), modif);
	}
	protected :
		vector<int> value;
};
 
struct fille : public mere {
	fille(int n, int K) : mere(n), K(K) {}
	int modif(int x) { return K*x;}
	private :
		int K;
};


#include <vector>
#include <algorithm>
 
using namespace std;
 
struct mere {
	mere(int n) : value(n), modif() {}
	void prix() {
		transform(value.begin(), value.end(), value.begin(), modif);
	}
	protected :
		vector<int> value;
                struct modif_value {
                        virtual int operator()(int );
                } modif;
};
 
struct fille : public mere {
	fille(int n, int K) : mere(n), K(K) , mK() {}
	private :
		int K;
                struct modifK : public modif_value {
                        int operator()(int x) {return K*x;}
                } mK;
};


Quelqu'un aurait t'il une solution? Par avance merci.

1 réponse

BOB-XM2 Messages postés 180 Date d'inscription   Statut Membre Dernière intervention   65
 
c'est normal que ca marche pas... la solution la mieux adaptée est l'utilisation de fonctions amies (déclarées friend void my_fonction(int x, float f ....) ) ceci dit que la fonction, ainsi déclarée dans le header de la struct mère et définie n'importe où, peut accéder a toutes les ressources de mere)
ca marchera à 100% ;)
0