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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.