用bind+function取代虚函数在好几年前就有人提出了,曾引起广泛的讨论,有支持的有反对的,可能赞成的人占大多数。这个话题挺有趣,本来是作为技术沙龙的开放性话题来讨论的,由于时间关系并没有讨论。今天就来具体探讨一下这个问题,我将做两个实验来验证一下这两种做法,具体是实现两个模式:策略模式和责任链模式。我将分别用经典的虚函数和bind+function来实现这两个模式。通过这两个实验来得出我的结论。
实验一:策略模式的实现
1.虚函数方式实现策略模式
class Calculater { public: virtual int calculate(int x, int y) = 0; }; class Minus : public Calculater { public: int calculate(int x, int y) { return x - y; } }; class Plus : public Calculater { public: int calculate(int x, int y) { return x + y; } }; class CalcuClient { private: Calculater* m_caculater; public: CalcuClient(Calculater* caculater) : m_caculater(caculater){} int calculate(int x, int y) { return m_caculater->calculate(x, y); } };