看书走一遍 effective c++
使用bind function 取代虚函数吗
虚函数实现策略模式 使用bind + function实现策略模式 策略模式 不用讲了吧
https://www.cnblogs.com/qicosmos/p/4527804.html
两种 实现 策略模式的方法 一种使用虚函数 一种使用bind function 方法 对比
#include<iostream> #include<functional> using namespace std; using std::placeholders::_1;//解决bind 站位符号 看cpp primer 标准bind 那里有讲解 using std::placeholders::_2; //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); } }; //使用 2.bind+function方式实现策略模式 class NewCalcuClient { private: std::function<int(int, int)> m_function; // std::function<int(int, int, double)> m_function1; public: NewCalcuClient(std::function<int(int, int)> function) : m_function(function){} //NewCalcuClient(std::function<int(int, int, double)> m_function1) : m_function_other(function){} int calculate(int x, int y) { return m_function(x, y); } }; int main(){ Minus minus;// - CalcuClient client(&minus);//传入一个派生类的对象的引用 到参数为基类指针的构造函数中去 基类指针调用虚函数 即虚基类 的虚函数 Plus plus;// + CalcuClient client2(&plus); int r = client.calculate(7, 4); int r2 = client2.calculate(7, 4); cout<<"r= "<<r<<endl; cout<<"r2= "<<r2<<endl; //bind+function NewCalcuClient newclient(bind(&Minus::calculate, &minus, _1, _2)); NewCalcuClient newclient2(bind(&Plus::calculate, &plus, _1, _2)); int r3 = newclient.calculate(7, 4); int r4 = newclient2.calculate(7, 4); cout<<"r3= "<<r3<<endl; cout<<"r4= "<<r4<<endl; return 0; }