c++関数ポインタテンプレート
2067 ワード
直接に次のように定義してはいけません。エラーを報告します。
http://cherishlc.iteye.com/blog/1274062
戻り関数ポインタの関数が見つかりました。以下のように宣言できます。
http://topic.csdn.net/u/20120418/00/64c2d59b-151b-450e-a7aa-39ff6bf941a5.html?seed=380167928&r=78289909
http://tangfeng.iteye.com/blog/602680
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