c++ - 在 C++ 中动态改变成员函数的行为
问题描述
对于家庭作业,我们需要使用多种不同的算法修改各种图像,并用我们的答案格式化文档。我已经用 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++ 中,函数指针和函数对象不参与重载决议,因此您实际上不能用不同的函数替换operator()()
,但您当然可以编写operator()()
某种类型的条件来检查先前选择的选择并决定调用哪个函数。
推荐阅读
- time - 如何在 Time Cartesian Chartjs 中配置线性标签?
- c# - 为什么编译正常,当我使用 Invoke 方法时,当我返回 Func 时不正常
直接地? - c# - 如何检查值是否包含特定字母并相应地更新值
- jetty - 地理服务器和迁移到 HTTPS
- mongoose - 将对象数组添加到突变 react-graphql-apollo-mongoose 时,“无法读取未定义的属性 'get'”
- python - 张量流无法导入
- python - 传递给参数“shape”的值的数据类型 float32 不在允许值列表中:int32、int64
- amazon-web-services - AWS S3 超出限制 - 如何更改层类型?
- node.js - 使用Nodejs将JSON对象存储在MySql2的JSON列中
- entity-framework - 实体框架核心迁移