あなたが持っていると仮定します
struct A{
void f(){}
};
struct B:public A{
};
template<typename C,void (C::*f)()>
struct Call{
void operator()(C* c){
(c->*f)();
}
};
なぜ
int main(){
void (B::*f)()=&B::f;
}
働くが
Call<B,&B::f> a;
しません、不平を言います
could not convert template argument ‘&A::f’ to ‘void (B::*)()
?
(Call<A,&A::f>
明らかに動作します)
似たような方法で
const void (B::*f)()=&B::f;
与える
cannot convert ‘void (A::*)()’ to ‘const void (B::*)()’ in initialization