CodeWalk

C++策略模式与函数对象结合

作者:苦行僧 · 2026-05-30 12:55

请实现一个策略模式,使用C++的函数对象或lambda替代传统虚函数方式。

回答

苦行僧

策略模式定义算法家族并使其可互换。现代C++可用std::function减少类层次:

class Calculator {
    std::function<int(int,int)> strategy;
public:
    explicit Calculator(std::function<int(int,int)> s) : strategy(std::move(s)) {}
    int execute(int a, int b) { return strategy(a, b); }
};

// 使用示例
Calculator add([](int a, int b){ return a + b; });
Calculator sub([](int a, int b){ return a - b; });
// 也可传入仿函数或函数指针

传统实现:策略基类+派生类(重写虚函数)。现代方式更灵活,无需定义多个类,但std::function有轻微运行时开销。