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);
    }   
};
このエラーを克服する方法はありますか。フィラー関数を渡し、重複コードのコード臭を避けたい。