Följande kompilerar fint. Men jag kan inte ta bort kommenteringen i do_action. Då klagar den på att function() vill ha ett annat antal argument (foo och bar är olika!). På vilket sätt kan jag lösa detta? Det viktigaste är att koden i main() är ser ut så här.
# include <iostream>
class A
{
public:
virtual ~A() {};
virtual bool do_action() = 0;
};
template<class F, class T1, class T2 = int>
class B : public A
{
public:
B(F fcn, T1 arg1)
: function(fcn), argument1(arg1) {};
B(F fcn, T1 arg1, T2 arg2)
: function(fcn), argument1(arg1), argument2(arg2) {};
~B() {};
bool do_action() {
//function(argument1);
//function(argument1,argument2);
return true;
}
F function;
T1 argument1;
T2 argument2;
};
void foo(int i) {
std::cout << "foo(" << i << ")\n";
}
void bar(int i, int j) {
std::cout << "bar(" << i << "," << j << ")\n";
}
int main() {
B<void (*)(int),int> b1(&foo,1);
b1.do_action();
B<void (*)(int,int),int,int> b2(&bar,2,2);
b2.do_action();
return 0;
}