我有这些课程:
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; }};
我有另一个类应该能够存储任何类型和数量的args的通用成员函数.该类看起来像这样:
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添加一些成员函数,如下所示:
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;}
编译代码时出现以下错误.
@H_301_41@no matching function for call to 'MFHolder::addMF(A1&,voID (A1::*)(int),int&)'
候选人是:
template<class T,class R,class ... Args> R MFHolder::addMF(T&,R (T::*)(Args ...),Args&& ...)
Thx提前! 总结
以上是内存溢出为你收集整理的c – 通用成员函数指针作为另一个类内的模板参数全部内容,希望文章能够帮你解决c – 通用成员函数指针作为另一个类内的模板参数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)