2010-12-15 24 views
6

jak mogę napisać wskaźnik funkcji jako domyślny szablon argumentu, I'am zgadywania napisać to tak:C++ wskaźnik funkcji jako domyślny szablon Argument

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

moje pytanie brzmi,

1.Czy to możliwe?

2.Jeśli jest i zgadnij powyższy kod jest poprawny, jaki jest cel PF tutaj? czy potrzebuję tego?

Odpowiedz

3
  1. Tak
  2. Nie, nie trzeba PF.

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

więcej pytań, jak napisać dla funkcji członka, jak to? 'wzorzec ' – uray

+0

. C2653 na VC'03: "" C "nie jest klasą lub obszarem nazw" on "nazwa_pliku F = R (C :: *) (A)>' – uray

+0

Jestem zadawane inne pytanie tutaj: http://stackoverflow.com/questions/4450246/c-pointer-to-member-function-as-template-default-argument – uray

2
  1. Tak, to jest możliwe
  2. PF jest nie tylko bezużyteczne, ale muszą być usunięte w tym kontekście. Byłoby to na przykład konieczne w kontekście deklaracji wskaźnika funkcji:

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

    , ale nie jest to wymagane ani legalne tutaj.

0

Proponuję typedef ing wskaźnik do funkcji. typedef R (*PF)(A); następnie podaj PF jako domyślny argument szablonu.