class ClxInc { public: int operator () ( int a) { return ++a; } }; template <class T> int TempFn( int a, T Fn ) { return Fn( a ); } int FnInc( int a ) { a++; return a; } void main() { int (*p)(int); p = &FnInc; p( 0 ); (*p)( 0 ); p = FnInc; p( 0 ); (*p)( 0 ); ClxInc objFn; TempFn(0, objFn); TempFn(0, p); TempFn(0, FnInc); TempFn(0, &FnInc); TempFn(0, *p); } //函数指针的使用比较灵活,赋值时取地址(&)可加可不加,取值时解引用(*)也可有可无 //对于模板函数TempFn而言,函数指针与函数对象一样,都可以做为第二个参数传入 //为保持形式上统一,函数指针最好与函数对象一致,就是赋值时不加取地址(&),取值时不加解引用(*),这样也方便记忆