稍后调用函数

Call a function later

本文关键字:函数 调用      更新时间:2023-10-16

我正在解析用户输入,并作为一个示例,执行以下响应:

用户输入1:

Array<int> a;
Populate()(a);
int v = 10;
a.append(v);

用户输入2:

Array<bool> a;
Populate()(a);
int v = true;
a.remove(v);

用户输入3:

Array<bool> a;
Populate()(a);
a.removeAll();

现在假设我希望在稍后阶段执行这些函数,这样parse就创建了Array对象,建立了要为此Array执行的命令(removeAll等)以及参数,但实际上并没有调用该命令——这种调用发生在稍后阶段。

有没有一个std或boost库可以帮助我实现这样的行为?

在C++11中,您可以记住std::function:中的操作

std::function<void()> action;
Array<int> a;
Populate()(a);
int v = 10;
action = [&a,v] () { a.append(v); };

请注意,当您调用操作时,它将在您给它的确切数组上工作(它是通过引用捕获的),所以请确保对象仍然存在!

在C++11中,您可以使用std::function和std::bind来存储以后可以调用的函数对象。在C++03中,您可以使用boost::function和boost::bind。

只需对您的3个函数进行编程,并根据用户对函数指针的输入分配其中一个函数。稍后您只需调用函数指针。