Howto: С++ Указатель функций со значениями по умолчанию

У меня есть:

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() );

Как бы я определил RespExtractor для приема функции с параметрами по умолчанию, поэтому я могу вызвать:

predict_image(im_in,im_out,create_hough_features);

Я пробовал следовать, без каких-либо успехов:

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

Ответ 1

Значки функций сами по себе не могут иметь значения по умолчанию. Вам придется либо обернуть вызов с помощью указателя функции в функции, которая имеет параметры по умолчанию (это может быть даже небольшой класс, который обертывает указатель на функцию и имеет operator() с параметрами по умолчанию) или имеет разные указатели на функции для разных перегрузок ваших функций.

Ответ 2

Параметры по умолчанию не являются частью сигнатуры функции, поэтому вы не можете сделать это напрямую.

Однако вы можете определить функцию-оболочку для create_hough_features или просто вторую перегрузку, которая принимает только два аргумента:

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());
}