[英]How to avoid polymorphism?
我有一个数据类型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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.