动态更改 C++ 中成员函数的行为

Dynamically change the behavior of member functions in C++

对于作业,我们需要使用多种不同的算法修改各种图像,并用我们的答案格式化文档。我已经用 C++ 编写了算法,但我想编写一个程序来自动修改图像和格式化文档。为此,我想要一个 class 形式的

class A
{
    void f1(Image img)
    {
    // do something to the image
    }
    void f2(Image img)
    {
    // do something else to the image
    }
    public:
       void setFunction(bool choice)
       {
          if(choice)
          {
          // define this.operator() = f1
          }
          else
          {
          // define this.operator() = f2
          }
       }
}

我想这样做的原因是因为家庭作业要求我们计算图像的不同属性,但大多数属性在问题中都是重复的。因此,我想写一个形式为

的函数
void answerQuestion(Image img, A imgProcessor)
{
    // load img, call imgProcessor(img)
    // and get the necessary properties from
    // img to answer the questions
}

通过这种方式,我可以在将 imgProcessor 对象传递给 answerQuestion 之前执行类似 imgProcessor.setFunction(choice) 的操作。我想使用一个对象,因为问题被分成几个部分,所以我希望 imgProcessor 对象保留问题其余部分所需的一些信息。 我不知道如何动态定义或重新定义 operator() 方法,或者它是否可能。当然,我对重载调用运算符或只声明我自己的方法并不在意,但我希望能够在代码中以相同的方式使用此调用。这在 C++ 中可行吗?

你必须以某种方式记住选择。在 C++ 中,函数指针和函数对象不参与重载决议,所以你不能 实际上 operator()() 替换为不同的函数,但你当然可以写 operator()()使用某种类型的条件来检查之前选择的选项并决定调用哪个函数。