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