C++策略模式与函数对象结合
请实现一个策略模式,使用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有轻微运行时开销。