Défit : classe abstraite en paramètre d'une fonction
Mon problème est le suivant :
Je voudrais passer en paramètre à une fonction g, une fonction f qui prend en paramètre une classe abstraite. Ça coince à la compilation et je ne vois pas comment m'en sortir même en faisant appel aux templates.
Voilà le code illustrant ce que je voudrais faire :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
#include <iostream>
//---------------------------------
class Obj {
public:
Obj() {};
Obj(std::string data) {};
virtual ~Obj() = 0;
virtual std::string Data() = 0;
};
//---------------------------------
class Son : public Obj {
public:
Son(std::string data):_data(data) {};
~Son() {};
std::string Data() { return _data;}
public:
std::string _data;
};
//---------------------------------
typedef Obj* (Func)(Obj*);
//---------------------------------
Son * f(Son * son) {
return new Son("new " + son->Data());
}
//---------------------------------
void g(Func func) {
Son son("data");
Son * newSon = func(&son);
}
//---------------------------------
int main() {
g(f);
return 0;
} |
Je suis prêt à utiliser la bibliothèque boost si cela permet de résoudre le problème.