大佬教程收集整理的这篇文章主要介绍了c – 通用成员函数指针作为另一个类内的模板参数,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
Base.h:
class Base{ public: Base(){} virtual ~Base(){} virtual void init() = 0; };
A1.h:
#include <iostream> #include "Base.h" using namespace std; class A1 : public Base{ public: A1(){} virtual ~A1(){}; virtual void init(){ cout << "A1::init() called" << endl; } void f1(){ cout << "Im in A1::f1" << endl; } void f2(int val){ cout << "Im in A1::f2 with val: " << val << endl; } };
我有另一个类应该能够存储任何类型和@L_618_5@的args的通用成员函数.该类看起来像这样:
@H_37_6@mFholder.h:
#include <functional> #include <deque> using namespace std; class MFHolder{ public: MFHolder(){}; ~MFHolder(){}; template<typename T,typename R,typename ... Args> R addMF(T & obj,R (T::*pf)(Args ...),Args&& ... args){ mfp.push_BACk(function<void()>(bind(pf,&obj,forWARD<Args>(args) ...))); } void runTasks(){ while(!mfp.empty()){ auto task = mfp.front(); mfp.pop_front(); task(); } } private: deque< function<void()> > mfp; };
现在我想从主要向MFHolder添加一些成员函数,如下所示:@H_958_5@main.cpp中:
#include "A1.h" #include "MFHolder.h" int main(){ MFHolder mfh; A1 a1Obj; //A2 a2Obj; //this should also work int val = 42; //mfh.addMF(a1Obj,&A1::f1); //this should also work mfh.addMF(a1Obj,&A1::f2,val); //add some more function calls here... //run all the tasks mfh.runTasks(); return 0; }
候选人是:
template<class T,class R,class ... Args> R MFHolder::addMF(T&,R (T::*)(Args ...),Args&& ...)
Thx提前!
以上是大佬教程为你收集整理的c – 通用成员函数指针作为另一个类内的模板参数全部内容,希望文章能够帮你解决c – 通用成员函数指针作为另一个类内的模板参数所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。