动态更改 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()()
使用某种类型的条件来检查之前选择的选项并决定调用哪个函数。
对于作业,我们需要使用多种不同的算法修改各种图像,并用我们的答案格式化文档。我已经用 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()()
使用某种类型的条件来检查之前选择的选项并决定调用哪个函数。