我想让一个类'(为方便起见,我们称它为 X)方法能够使用指向其自己方法的指针,以防我能够提取仅因调用的方法而异的代码。
例如,有几个块,如:
a();
b();
c();
MehtodCall(someResultOfabc);
d();
e();
我想提取一个只使用作为指针传递的不同方法的方法:
所以我想要类似的东西:
void X::ExtractedMethod( void(X::*MethodCallPointer)(TypeOfABCResult) ){
a();
b();
c();
this->*MethodCallPointer(someResultOfabc);
d();
e();
}
并以这种方式使用这个功能:
void X::DoSomethingA(){
ExtractedMethod(&X::ADoer);
}
void X::DoSomethingB(){
ExtractedMethod(&X::BDoer);
}
和操作系统...
不幸的是,我被困在这里,因为我得到一个编译错误,即方法指针不会评估为采用一个参数的方法调用。
如果原因是 X 在此声明中仍然是不完整的类型,我开始徘徊?
如果有人能告诉我如何做到这一点,或者为什么不可能,我会很高兴。
我真正非常不想要的是获得一些变通方法,例如在签名和 lambda 中使用 std::function,或者使用指向采用 X* 并调用我需要的特定方法的静态方法的指针,也不做switch 语句和标志,也不是该 switch 语句使用接口,实现策略模式并使用策略的静态实例作为参数;)这些并不是这种情况下的所有解决方法,但我仍然不想阅读关于其他解决方法。我唯一感兴趣的就是以这种方式“有可能,以及如何去做”。