c – 通用成员函数指针作为另一个类内的模板参数

c – 通用成员函数指针作为另一个类内的模板参数,第1张

概述我的问题类似于 this.而’Karrek SB的答案实际上对我有所帮助. 我有这些课程: Base.h: class Base{public: Base(){} virtual ~Base(){} virtual void init() = 0;}; A1.h: #include <iostream>#include "Base.h"using namespace s 我的问题类似于 this.而’Karrek SB的答案实际上对我有所帮助.
我有这些课程:

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 – 通用成员函数指针作为另一个类内的模板参数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1226590.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存