c++ - 如何使用继承或多态避免重复,重构的最佳方式
问题描述
我有一个类操作
Class Operation {
virtual void execute(Operation, OperationCallback) = 0
}
带有回调
using OperationCallback = std::function<void(Error)>;
就像从它延伸出来的 30 个不同的类
InsertOperation : public Operation
EditOperation : public Operation
他们每个人都实现了执行并在操作结束时设置回调
我使用执行操作
void ExecuteOperation(Operation operation, OperationCallback operationCallback){
operation->execute(operation, operationCallback);
}
我想要一个名为 Result 的新回调,其中包括一个错误和一个 Id
Class Result{
Error error
int id;
Error getError()
Int getId()
}
新的回调将仅用于某些操作,而不是全部
但是我想重用现有的代码,所以我不必重复很多方法来使用新的回调
避免重复
using OperationWithResultCallback = std::function<void(Result)>;
void ExecuteOperationWithResult(Operation operation, OperationCallback operationCallback)
{
operation-> executeWithResult(operation, operationCallback);
}
In Operation Classs
virtual void executeWithResult(Operation, OperationWithResultCallback) = 0
Result 可能有一个扩展 Error 的选项,但随后我将不得不更改以在任何地方使用引用 &Error
我也可以将 id 添加到 Error 类本身,但我想避免这种情况。
有没有其他方法可以只在我需要的操作中使用 Result 但仍然在任何地方保留 Error 参数?
解决方案
推荐阅读
- r - 将参数固定到 JAGS 中的分布
- html - 断点前的引导列重叠
- javascript - Sequelize 可以创建表格,但我无法插入或选择任何内容
- video - Youtube-DL - 如何为流式传输密钥 url 附加 URL 参数
- bash - 如何使用环境变量标记 docker 映像
- javascript - ReactJS,带有 axios 的 Swiper 滑块
- node.js - 多对多关联不返回关联表
- xpath - XPath - 查找属性的值,稍后用于验证数量 - 页面对象框架
- python - 从 HTML 按钮运行 python 脚本
- git - 删除了对密码身份验证的支持。请改用个人访问令牌