我可以根据某些条件动态更改 C++ 类成员函数吗?

问题描述 投票:0回答:1

请问我怎么会有这种逻辑?

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&)'
c++
1个回答
0
投票

创建

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;
};
© www.soinside.com 2019 - 2024. All rights reserved.