c++関数ポインタテンプレート

2067 ワード

直接に次のように定義してはいけません。エラーを報告します。
typedef  template<class T> bool (*templateFunc)(const T& t1,const T& t2); //     !!!
テンプレート関数を関数として使ってはいけないパラメータを意味しません!!関数ポインタを振り返るとき
http://cherishlc.iteye.com/blog/1274062
戻り関数ポインタの関数が見つかりました。以下のように宣言できます。
int (*fff(int a))(int ,int){//           
    return sub;  
}  
テストを経て、下記の関数の中の関数ポインタを伝えるテンプレートができました。
#include <iostream>

using namespace std;

template<class T> inline bool isEqual(const T& t1,const T& t2){
	return t1==t2;
}

//typedef  template<class T> bool (*templateFunc)(const T& t1,const T& t2); //     !!!

//       T      ,         !!!        
template<class T> bool isEqual2(T t1,T t2,bool (*isCompatible)(const T&,const T&)=isEqual<T>){
	return isCompatible(t1,t2);
}

void main(){
	bool (*isIntEqual)(int,int);
	//isIntEqual=isEqual2<int>; //  ,   
	bool not=isEqual2<int>(1,2);
	bool yes=isEqual2<double>(1.0,1.0);
	cout<<"1==2? "<<not<<"
1.0==1.0? "<<yes<<endl; }
他の二つの方法を転載します。
http://topic.csdn.net/u/20120418/00/64c2d59b-151b-450e-a7aa-39ff6bf941a5.html?seed=380167928&r=78289909
template <typename PktType>
struct Wrapper
{
typedef int (* CallbackFunPtrType) (const PktType& CurPkt);
};
      
     
Wrapper<int>::CallbackFunPtrType callback=....
2、C++にテンプレート関数ポインタで依頼を実現する
http://tangfeng.iteye.com/blog/602680