void(Derived::*)()
对我来说,将 a转换为 a看起来非常安全void(Base::*)()
,就像在这段代码中一样:
#include <iostream>
#include <typeinfo>
using namespace std;
struct Base{
void(Base::*any_method)();
void call_it(){
(this->*any_method)();
}
};
struct Derived: public Base{
void a_method(){
cout<<"method!"<<endl;
}
};
int main(){
Base& a=*new Derived;
a.any_method=&Derived::a_method;
a.call_it();
}
但是编译器抱怨在a.any_method=&Derived::a_method;
. 这是防止微妙的编程错误的障碍,还是只是让编译器编写者的生活更轻松?是否有解决方法让Base
类有一个指向Derived
没有类型知识的成员函数的指针(也就是说,我不能Base
使用模板参数制作模板Derived
)。