c++ - 如何避免多态性?
问题描述
我有一个数据类型OperationSequence
。下面是 OperationSequence.h
class OperationSequence
{
public:
void appendOperation(std::function<double(double)> operation);
void moveOperation(int operation_index);
void eraseOperation(int operation_index);
const std::vector<std::function<double(double)>>& data() const;
private:
std::vector<std::function<double(double)>> operation_sequence;
};
double executeSequence(const OperationSequence& operation_sequence, double value);
void executeSequence(const OperationSequence& operation_sequence, const std::string& file_name);
我必须实施printOperationSequence(const OperationSequence& operation_sequence).
分配对操作的要求是f: double -> double
。还要求进行一些操作,例如Addition
和。Multiplication
明显的实现将是创建一个接口Operation
并使其可调用f: double -> double
并具有std::string getName()
方法。
什么是 OperationSequence 保持这种通用性的好方法,同时又使以有意义的方式打印出 OperationSequence 变得容易和高效?
有意义的方式是像乘法,加法,......
将构造委托给其他也会创建 operation_name_sequence 的类是个好主意吗?
PS随意改进问题标题:D
解决方案
如果你想避免多态性(即使std::function
使用它或类似的类型擦除),你可以创建类Operation
来为函数添加名称:
struct Operation
{
std::string name;
std::function<double(double)> f;
};
class OperationSequence
{
public:
void appendOperation(const Operation& operation);
void appendOperation(const std::string& name, std::function<double(double)> f);
void moveOperation(int operation_index);
void eraseOperation(int operation_index);
const std::vector<Operation>& data() const;
private:
std::vector<Operation> operations;
};
然后
void printOperationSequence(const OperationSequence& operation_sequence)
{
for (const auto& op : operation_sequence.data()) {
std::cout << op.name << std::endl;
}
}
推荐阅读
- graphql - 在 GraphQL ruby 中的任何查询之前运行函数
- sql - 从每个组oracle中获取最大值
- r - 使用函数 cut 计算区间
- java - JPA 将存储库 findBy 与实体对象一起使用
- c# - SQL 服务器 Microsoft.Data.SqlClient.SqlException (0x80131904):执行超时在 azure 上过期
- java - 如何避免在tomcat中启动一次以上的进程
- smooth-scrolling - 将 Smoothscroll 与 gsap 和 magicScroll 固定部分一起使用
- pyomo - pyomo Port Extensive 中的意外行为
- ios - 无法解析引用“UIKit.UINavigationBarAppearance”
- javascript - Javascript 在索引 2 上合并 2 个数组