c ++作为没有指针的参数

a39*_*920 5 c++ function-pointers

在搜索如何在C++中将函数作为参数传递时,我只找到使用函数指针的示例.但是,以下内容在Visual Studio中按预期编译并输出"g20".这样声明f更好吗:

f(void (*fun)());
Run Code Online (Sandbox Code Playgroud)

代替

f(void fun());
Run Code Online (Sandbox Code Playgroud)

我的例子:

#include <iostream>

using namespace std;

int f(void fun());
void g();

int main() {
    cout << f(g);
}

void g() {
    cout << "g";
}

int f(void fun()) {
    fun();
    return 20;
}
Run Code Online (Sandbox Code Playgroud)

cdo*_*nat 4

您可能更喜欢std::function<>而不是函数指针。它不仅可以存储函数指针,还可以存储 lambda、绑定表达式、函数对象(带 的对象operator())等。尤其是 lambda 将使您的 API 变得更好用。

int f(std::function<void()>& fun) {
    fun();
    return 20;
}
Run Code Online (Sandbox Code Playgroud)