Howto:c ++函数指针,默认值

Pou*_*sen 10 c++ function-pointers

我有:

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() );
Run Code Online (Sandbox Code Playgroud)

我如何定义RespExtractor接受具有默认参数的函数,例如我可以调用:

predict_image(im_in,im_out,create_hough_features);
Run Code Online (Sandbox Code Playgroud)

我试过跟随,没有成功:

typedef void (*RespExtractor) (const cv::Mat & image, cv::Mat & resp,FeatureParams params, FeatureParams()); 
Run Code Online (Sandbox Code Playgroud)

pmd*_*mdj 12

函数指针本身不能具有默认值.您必须通过函数指针在具有默认参数的函数中包装调用(这甚至可以是包装函数指针并具有operator()默认参数的小类),或者具有不同的函数指针你的功能超载.


Oli*_*rth 5

默认参数不是函数签名的一部分,因此您不能直接执行此操作。

但是,您可以为 定义一个包装函数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());
}
Run Code Online (Sandbox Code Playgroud)