Hi, ich habe eine Template Klasse mit einer Memberfunktion Funktion, die
als optionalen Parameter einen Funktor oder Funtionszeiger haben soll.
ich möchte also hinterher
entweder
process(var)
oder
process(var, Funktor())
oder
process(var, &funktion)
aufrufen können
wie hat das auszusehen?
Bisher hab ich das getrennt implementiert:
1 | #include <iostream>
|
2 | #include <string>
|
3 | using namespace std;
|
4 |
|
5 | template <class A, class B>
|
6 | class C
|
7 | {
|
8 | public:
|
9 |
|
10 | static string printNothing() {return "";}
|
11 |
|
12 | template < typename ProcessFunctorType>
|
13 | void process(int i, ProcessFunctorType& pfunc)
|
14 | {
|
15 | cout << i << " "<<pfunc()<<endl;
|
16 | }
|
17 |
|
18 | // diese funktion hätte ich gerne weg, so dass standardmäßig die
|
19 | // andere mit printNothing aufgerufen wird.
|
20 | void process(int i){
|
21 | cout << i << " "<<endl;
|
22 | }
|
23 |
|
24 | A a;
|
25 | B b;
|
26 | };
|
27 |
|
28 | static string printSomething() {return "foo";}
|
29 |
|
30 | int main()
|
31 | {
|
32 | C<int, int> c;
|
33 | c.process(1);
|
34 | c.process(2, C<int, int>::printNothing);
|
35 | c.process(3, printSomething);
|
36 |
|
37 | }
|
Da ich aber noch einen weiteren funktor hinzufügen möchte, explodiert
die Variantenanzahl und ich würde das gerne vereinheitlichen
Hat jemand eine Idee?
hier zum direkten ausprobieren:
http://codepad.org/Pkh944rz
Gruß
Vlad