读书人

怎么定义一个函数指针指向一个带有默

发布时间: 2012-03-17 19:06:27 作者: rapoo

如何定义一个函数指针,指向一个带有默认值参数的函数?
比如如何定义这个函数的函数指针
void fun(int a,int b=0)
{
}

[解决办法]
函数带默认值,他的指针是不可能把这种默认值带过去的。默认值是编译期信息,而你要的是运行时的默认值,这在函数指针是不可实现的。

唯一可以做到的是用functor,用一个函数类对象实现。如果一个类实现了()运算符,他就可以象一个函数来用,而对于你的要求,可以通过实现不同版本的()实现


[解决办法]

既然你能够使用参数的默认值,那我就要假定你用的是C++而不是C。

在C++中,如3楼所述,是用函数子或叫函数对象来实现的。

这里的关键问题在于,普通的函数是不能携带状态的,而函数对象可以。

以下是一个实现。

C/C++ code
#include <cstdio>using std::printf;class ff {public:    explicit ff(int value = 3)        : value_(value) {}    void operator()() {        printf("%d\n", value_);    }private:    int value_;};void fff(ff f) {    f();}int main() {    fff(ff());        return 0;} 

读书人网 >C语言

热点推荐