簡體   English   中英

如何避免多態?

[英]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 還請求了一些諸如AdditionMultiplication類的操作。 明顯的實現是創建一個接口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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM