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

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

对于家庭作业,我们需要使用多种不同的算法来修改各种图像,并使用我们的答案来格式化文档。我已经用C ++编写了算法代码,但是我想编写一个程序来修改图像并自动设置文档格式。为此,我想要一个具有以下形式的类:

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.setFunction(choice)对象传递给imgProcessor之前,我可以做类似answerQuestion的操作。我想使用一个对象,因为问题分为多个部分,因此我希望imgProcessor对象保留其余问题所需的一些信息。我不知道如何动态定义或重新定义operator()方法,或者甚至不可能。当然,无论是重载调用运算符还是声明自己的方法,我都无所谓,但我希望能够以遍及代码的相同方式使用此调用。这在C ++中可能吗?

对于家庭作业,我们需要使用多种不同的算法来修改各种图像,并使用我们的答案来格式化文档。我已经用C ++编写了算法,但是我想写一个...

c++ operator-overloading member-function-pointers
1个回答
0
投票

您必须以某种方式记住选择。在C ++中,函数指针和函数对象不参与重载解析,因此您不能actually

© www.soinside.com 2019 - 2024. All rights reserved.