2011-09-04 61 views
0

我將如何定義一個函數ptr指向一個函數,該函數返回一個布爾值,但將兩個未知(但相等)類型作爲參數?函數ptr到具有模板參數的函數

應該是這樣的,但我的IDE標誌着這是錯誤的:

template<class arg>
bool (ptr*)(arg,arg);

我也想這跟這需要這樣的功能,PTR比較兩個參數它得到一個功能結合起來。

喜歡:

template<class arg>
void function(arg one,arg two,ptr comparefunction)

是這樣甚至可能嗎?

+0

可能重複:http://stackoverflow.com/問題/ 7293640/function-pointer-as-a-template/7293669#7293669 –

+2

我同意你的拼寫。但是你在拼寫'kombine'時應該保持一致。 (aww男子awoodland毀了它) –

+0

這將使一個酷樂隊的名字。哦,等一下,這是一個樂隊的名字。 –

回答

2

你不能有模板typedefs,這似乎是你最初的問題。對於需要功能指針的功能,您可以這樣做:

template<class arg> 
void function(arg one,arg two,bool (*comparefunction)(arg,arg)) 

改爲。

您最初的語法也是不對的:

bool (*ptr)(arg,arg); // * goes before the name 
2

你想要做什麼是可能的,以這樣的方式

template<class TArg> 
struct funptr 
{ 
    typedef bool (type*)(TArg, TArg); 
}; 

template<class TArg> 
void function(TArg one,TArg two,typename funptr<TArg>::type compare) 
{ 
} 

或者,只需做到這一點:

template<class TArg> 
void function(TArg one, TArg two, bool (*compare)(TArg, TArg)) 
{ 
} 
1

與其他問題一樣,您必須使用struct

template<typename T> 
struct Function { 
    typedef bool (*Ptr)(T, T); 
}; 

然後你就可以使用它像這樣:

Function<int>::Ptr f = &myfunction; 

至於第二個,你可以這樣做:

template<class T> 
void function(T one, T two, typename Function<T>::Ptr comparefunction)