如何将一个 void 函数传递给另一个 void 函数?

How to pass a void function to another void function?

本文关键字:void 函数 另一个 一个      更新时间:2023-10-16

我有一个文字冒险游戏,当你进入一个房间时,它会显示一些文字,然后去下一个房间。每个房间都是一个功能。我想制作一个功能,允许我设置原始房间进入的下一个房间(或功能(,因为这将为我节省大量时间。我知道下面的代码不起作用,但是有没有办法将void类型函数作为另一个void类型函数的参数传递?(如下所示(

#include <iostream>
using namespace std;
void room2();
void room1();
void room(void a);
void room1()
{
cout << "next room" << endl;
}
void room2()
{
cout << "other rooom" << endl;
}
void room(void a)
{
cout << "Things happen here now you go to the next room" << endl;
a();
}
int main()
{
room(nextRoom());
}
// declare a type of function pointer
typedef void (*room_ptr)();
// declare a method that takes a function pointer as arg
void room(room_ptr a)
{
// call the function passed in... 
a();
}
// store the current room 
room_ptr current_room = room1;
// easy to modify later
current_room = room2;
// and just call... 
room(current_room);

您可以要求编译器推断它,而不是手动指定函数指针类型:

template<class Fn>
void room(Fn fn) {
// ...
fn();
}
room(room1);

现在,您也可以使用捕获 lambda 调用room

int some_var;
room([some_var]() { ... });

(与无捕获的 lambda 相比,捕获 lambda 无法转换为函数指针。