请问我怎么会有这种逻辑?
class SomeClass
public:
SomeClass ;
void (*modifier)(int&) {m1};
private:
void m1(int& i) {i++;}
void m2(int& i) {i--;}
void changer (bool condition) {
if(condition) {
modifier=m1;
} else {
modifier=m2;
}
}
当我尝试编译这样的代码时,我得到
error: cannot convert 'SomeClass::m1' from type 'void (SomeClass::)(int&)' to type 'void (SomeClass::*)(int&)'
创建
modifier
一个成员函数指针,并将通过该指针调用成员函数包装到另一个成员函数中:
#include <functional>
class SomeClass {
public:
void fn(int& i) {
std::invoke(modifier, this, i);
}
void changer(bool condition) {
if (condition)
modifier = &SomeClass::m1;
else
modifier = &SomeClass::m2;
}
private:
void m1(int& i) { i++; }
void m2(int& i) { i--; }
void (SomeClass::*modifier)(int&) = &SomeClass::m1;
};