比如如何定义这个函数的函数指针
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; }