64,637
社区成员
发帖
与我相关
我的任务
分享
template<class T, class... P>
int TaskPro(T&& fc, P&&... pm)
int FuncA(int nParamCount, ...)
{}
TaskPro(FuncA, 1, 2)
class clA
{
public:
int FuncA(int nParamCount, ...) {};
};
TaskPro(&clA::FuncA, 1, 2)
template<class T, class... P>
int TaskPro(T&& fc, P&&... pm){
return 0;
}
参数什么都没用到,当然能编译通过
试试第二个参数带着一个与函数所属类类型的对象,类似C++11中std::bind的用法
template<class O, class T, class... P>
int TaskPro(O&& obj, T&& fc, P&&... pm)
{
return (obj.*fc)(pm...);
}
class clA
{
public:
int FuncA(int nParamCount, ...)
{
return 0;
};
};
int main(int argc, char* argv[])
{
clA a;
typedef int (clA::*fun)(int, ...);
fun p = &clA::FuncA;
TaskPro(a, p, 1, 2);
}
成员函数的版本, 这样应该可以#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;
int FuncA(int nParamCount, ...){
return 0;
}
template<class T, class... P>
int TaskPro(T&& fc, P&&... pm){
return 0;
}
class clA
{
public:
int FuncA(int nParamCount, ...) {
return 0;
};
};
int main(){
TaskPro(FuncA, 1, 2);
TaskPro(&clA::FuncA, 1, 2);
cout<<"Hello....."<<endl;
system("pause");
return 0;
}
上面代码编译可以通过
class clA
{
public:
static int FuncA(int nParamCount, ...)
{
return 0;
};
};
TaskPro(clA::FuncA, 1, 2)
或者
class clA
{
public:
int FuncA(int nParamCount, ...)
{
return 0;
};
};
clA a;
TaskPro(a.FuncA, 1, 2)