“void SomeFunction(int,void *)”是什么意思?

时间:2018-03-20 09:49:53

标签: c++ function

我正在尝试一些OpenCV并且正在使用Canny边缘检测器Example的教程。

在本教程中,有一个声明如下的函数:

void CannyThreshold(int, void*)

然后从main里面调用这个;

CannyThreshold(0, 0);

我不明白声明(int,void *)部分的目的,因为CannyThreshold功能中没有使用这些参数。

为什么它不仅仅是这样声明?

void CannyThreshold();

3 个答案:

答案 0 :(得分:8)

请注意示例中的这一行:

createTrackbar( "Min Threshold:", window_name, &lowThreshold, max_lowThreshold, CannyThreshold );

此处,CannyThreshold作为回调参数传递给createTrackbarcreateTrackbar的签名要求回调接受这两个参数,所以CannyThreshold会这样做,即使它没有用它们。

答案 1 :(得分:1)

如果您将该功能声明为

void CannyThreshold();

相同
void CannyThreshold(void);

换句话说,它是一个不需要参数的函数。

如果你希望函数接受参数,但从不使用这些参数,你仍然必须声明参数的类型。

答案 2 :(得分:1)

这应该是因为这个函数是一个回调,因此它的签名是由任何使用的API强制执行的(这里是:OpenCV)。

回调是当函数注册进入事件系统时,函数给出的名称,以便稍后调用。注册回调的函数称为仿函数,它将另一个函数作为参数,并对其执行某些操作。例:

using callback_t = void(*)(int);
void register_callback(callback_t cb);

如果你想要register_callback定义一个要回调的回调,那么它需要是一个int并返回void的函数,即使你没有&#39 ; t需要整数。因此,以下定义是可能的:

void my_callback(int) { std::cout << "done\n"; }
register_callback(my_callback);