std::function 的参数列表如何工作

Twi*_*ard 1 c++ templates parameter-passing std-function

如果这是一个非常菜鸟的问题,我很抱歉,但我对如何指定 std::function 参数列表感到困惑,如下所示:

std::function<void(double)> func;
Run Code Online (Sandbox Code Playgroud)

但在实际的函数中,这是行不通的:

void passFunc(void(double) func) {}
Run Code Online (Sandbox Code Playgroud)

对于上面的方法,您必须指定一个函数指针。那么如何允许 void(double) 传递到 std::function 中?void(double) 是一种类型吗?如果不是,它怎么会出现在 std::function 的参数列表中?如果它是类型,为什么 void(double) 作为函数参数的类型是无效的?

lor*_*rro 5

您可以声明这样的类型:

using Func = void(double);
Run Code Online (Sandbox Code Playgroud)

但在定义中,您仍然需要参数的名称;否则,您无法在函数中使用它:

void passFunc(void func(double)) {}
Run Code Online (Sandbox Code Playgroud)

请注意,它func位于返回类型和参数之间。如果你不喜欢这样,你可以使用上面定义的类型:

void passFunc(Func func) {}
Run Code Online (Sandbox Code Playgroud)