2011-09-04 3 views
0

Comment définir une fonction ptr qui pointe vers une fonction qui renvoie un booléen mais prend deux types inconnus (mais égaux) comme arguments?Fonction ptr à une fonction avec des arguments de modèle

devrait être quelque chose comme ça, mais mes marques IDE ce que faux:

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

Je veux aussi combiner cela avec une fonction qui prend une telle fonction ptr pour comparer deux arguments qu'il obtient.

aime:

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

Est-ce quelque chose comme ça possible?

+0

double possible: http://stackoverflow.com/ questions/7293640/function-pointer-as-a-template/7293669 # 7293669 –

+2

J'approuve ton orthographe. Mais vous devriez être cohérent à ce sujet dans votre orthographe de 'kombine'. (Aww Man Awoodland l'a ruiné) –

+0

Cela ferait un nom de groupe kool. Oh attends, c'est un nom de groupe. –

Répondre

2

Vous ne pouvez pas avoir de template typedefs, ce qui semble être ce que vous demandez initialement. Pour la fonction qui prend un pointeur de fonction que vous pouvez faire:

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

à la place.

Votre syntaxe initiale est également erroné:

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

Qu'est-ce que vous voulez faire est possible, de cette façon:

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

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

Ou, faites simplement ceci:

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

Comme dans l'autre question, vous devez utiliser un struct:

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

Et vous pouvez l'utiliser comme ceci:

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

Quant au second, vous pouvez le faire:

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