class A{
virtual int foo1(int a){
return foo1_1(a,filler(a));
}
template<typename FunctionPtr_filler>
int foo1_1(int a, FunctionPtr_filler ptrFn)
{
int b;
b = (this->*ptrFn)(a); // --> compile error: pointer to member type int (B::)(int) incompatible with object type A
return b;
}
protected:
virtual int filler(int a){
return a*a;
}
};
class B: public A{
virtual int foo1(int a){
return foo1_1(a, &B::filler);
}
virtual int filler(int a){
return (a+a);
}
};
このエラーを克服する方法はありますか。フィラー関数を渡し、重複コードのコード臭を避けたい。