Howto: указатель на функцию c ++ со значениями по умолчанию - PullRequest
10 голосов
/ 18 марта 2012

У меня есть:

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

Ответы [ 2 ]

12 голосов
/ 18 марта 2012

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

4 голосов
/ 18 марта 2012

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

Однако вы можете определить функцию-оболочку для 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());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...