2010-12-15 7 views
6

comment puis-je écrire un pointeur de fonction comme argument de modèle par défaut, I'am devinant pour l'écrire comme ceci:C++ Fonction pointeur comme modèle par défaut Argument

template<typename R, 
     typename A, 
     typename F=R (*PF)(A)> 
class FunctionPtr { ... 

ma question est,

1.is c'est possible?

2.si c'est le cas et que mon code ci-dessus est correct, quel est le but de PF ici? Ai-je besoin de ça?

Répondre

3
  1. Oui
  2. Non, vous n'avez pas besoin PF.

    template<typename R, 
         typename A, 
         typename F=R (*)(A)> 
    
+0

plus question, comment puis-je écrire pour la fonction de membre, comme ça? 'template ' – uray

+0

a err err. C2653 sur VC'03: "'C' n'est pas une classe ou un espace de nommage" sur 'typename F = R (C :: *) (A)>' – uray

+0

Je me suis posé une autre question ici: http://stackoverflow.com/questions/4450246/c-pointer-à-member-function-as-template-default-argument – uray

2
  1. Oui, il est possible
  2. Le PF non seulement est inutile, mais doit être retiré dans ce contexte. Il serait, par exemple, nécessaire dans le cadre d'une déclaration de pointeur de fonction:

    int (*PF)(double) = &A::foo; // declares a 'PF' variable of type 'int (*)(double)' 
    

    mais il est ni requise ni juridique ici.

0

Je suggère typedef d'indiquer un pointeur à la fonction. typedef R (*PF)(A); puis donne PF comme argument de modèle par défaut.

Questions connexes