2012-03-18 19 views
10

tengo:Como: C++ puntero de función con valores por defecto

typedef void (*RespExtractor) (const cv::Mat & image, cv::Mat & resp); 

virtual void predict_image(const cv::Mat & src, 
      cv::Mat & img_detect,cv::Size patch_size, 
      RespExtractor); 

void create_hough_features(const cv::Mat & image, cv::Mat & resp, FeatureParams & params = FeatureParams()); 

¿cómo iba a definir el RespExtractor para aceptar una función con parámetros por defecto, como puedo llamar:

predict_image(im_in,im_out,create_hough_features); 

Probé siguiente , sin éxito:

typedef void (*RespExtractor) (const cv::Mat & image, cv::Mat & resp,FeatureParams params, FeatureParams()); 
+1

parámetros predeterminados no son parte de la firma de la función ... –

+0

así que no puedo lograr lo que quiero ? –

+0

No de esta manera. Considere la función std :: en su lugar – Lol4t0

Respuesta

8

Los punteros de función en sí no pueden tener valores predeterminados. Deberá envolver la llamada mediante el puntero de función en una función que tenga parámetros predeterminados (incluso podría ser una clase pequeña que ajuste el puntero a la función y tenga un operator() con parámetros predeterminados), o tener punteros de función diferentes para el diferentes sobrecargas de tus funciones.

+0

Buena sugerencia sobre el ejemplo de clase. –

+0

Creé un contenedor de clases, ¿es posible hacer un resumen de operador en la clase base? –

+1

@ s093294: lo es, pero yo desaconsejaría. Aconsejaría usar una función normal si necesita ser virtual ... la pregunta sería, por supuesto, ¿por qué debería ser virtual, ya que se envía a un puntero de función? –

4

Los parámetros predeterminados no son parte de la firma de la función, por lo que no puede hacer esto directamente.

Sin embargo, se puede definir una función de contenedor para create_hough_features, o simplemente una segunda sobrecarga que sólo toma dos argumentos:

void create_hough_features(const cv::Mat & image, cv::Mat & resp, FeatureParams & params) { 
    // blah 
} 

void create_hough_features(const cv::Mat & image, cv::Mat & resp) { 
    create_hough_features(image, resp, DefaultParams()); 
} 
+0

Gracias. Hice typedef void (* RespExtractor) (const cv :: Mat & image, cv :: Mat & resp, FeatureParams &); y predicción_imagen (im_in, im_out, create_hough_features, FeatureParams & par = DefaultParams()); –

+0

Vent con la sugerencia de @pmjordan –

Cuestiones relacionadas