如何在c ++类中创建和使用带有alternativ参数列表的functionpointer

时间:2017-03-14 11:42:53

标签: c++ function-pointers

返回另一个函数指针问题;)

我想在我的类中创建一个函数指针,它可以指向具有不同参数列表的不同函数。那就是我想要一个可以指向并调用以下所有函数的函数指针(带有resp参数)。

funct1采用函数指针和

使用指向func3的指针调用func2,

func2调用func3

在C代码中,它们被声明为:

typedef int         (*FUNCTION)();

int  func1(long sec, FUNCTION func, int argc, long *argv);
int  func2(FUNCTION func);
int  func3();

并像这样调用

func1(b->argv[0], func2, 3, arglist){ func(func3); }

现在我已经创建了一个类cDP5来保存那些方法和函数指针 我已经这样声明了

typedef int(cDP5::*FUNCTION)(int *fc, char *buf, int sz);

但在此次调用中遇到编译错误

func1(b->argv[0], func2, 3, arglist);

收到此错误:

cDP5.cpp:725:48: error: no matching function for call to ‘cDP5::func1(long&, <unresolved overloaded function type>, int, long int [3])’
cDP5.cpp:725:48: note: candidate is:
In file included from cDP5.cpp:11:0:
cDP5.h:96:9: note: int cDP5::func1(long int, cDP5::FUNCTION, int, long int*)
cDP5.h:96:9: note:   no known conversion for argument 2 from ‘<unresolved overloaded function type>’ to ‘cDP5::FUNCTION {aka int (cDP5::*)(int*, char*, int)}’

好的我想如果我尝试制作一个这样的FUNCTION演员那么

func1(b->argv[0], (cDP5::FUNCTION)func2, 3, arglist);

然后我收到了这个错误:

cDP5.cpp:725:45: error: cannot convert ‘cDP5::func2’ from type ‘int (cDP5::)(int, long int*)’ to type ‘cDP5::FUNCTION {aka int (cDP5::*)(int*, char*, int)}’

如何在c ++类中创建和使用想要的functionpointer? 或者我是否需要为每个参数列表创建一个?

1 个答案:

答案 0 :(得分:0)

好的,基于Schiff所提到的和我自己的研究,我发现不可能创建一个带有多个paremeterlists的函数指针。 我必须为每个参数列表创建functionpointer。

虽然有一个选项可以使用我在template function pointer parameter in a class method中找到的模板参数,但我认为这会稍微改变参数类型;)