2010-12-15 34 views
6

¿Cómo escribo un puntero a función como argumento de plantilla por defecto, I'am adivinando escribir así:C++ puntero de función como argumento plantilla predeterminada

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

mi pregunta es,

1.is ¿es posible?

2.si es y mi código de suposición anterior es correcto, ¿cuál es el propósito de PF aquí? ¿Necesito esto?

Respuesta

3
  1. No, no es necesario PF.

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

más pregunta, ¿cómo escribo para la función miembro, como esto? 'template ' – uray

+0

err. C2653 en VC'03: "'C' no es una clase o espacio de nombres" on 'typename F = R (C :: *) (A)>' – uray

+0

Me han hecho otra pregunta aquí: http://stackoverflow.com/questions/4450246/c-pointer-to-member-function-as-template-default-argument – uray

2
  1. Sí, es posible
  2. El PF no sólo es inútil, sino que debe ser eliminado en este contexto. Sería, por ejemplo, sea necesario en el contexto de una declaración de puntero de función:

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

    pero es necesario ni legal aquí.

0

Sugiero typedef ing puntero a la función. typedef R (*PF)(A);, luego proporcione PF como argumento de plantilla por defecto.

Cuestiones relacionadas