c++ - 将函数/方法指针推送到双端队列

标签 c++ function-pointers deque pointer-to-member

我正在为运行函数创建一个队列。我将需要调用的函数放入 std::deque<bool(*)()> 中然后我稍后循环调用每个函数并让它运行,有时甚至根据返回做一些事情。

我遇到的问题实际上是关于将这些函数放在双端队列中。

我在一个名为 A2_Game 的类中有这个双端队列.我还有一个名为 Button 的类(class).

我的代码类似于以下内容:

class Button
{
    bool DoInput();
}

class A2_Game
{
    std::deque<bool(*)()> Input_Functions;
    bool EnterName()
}

A2_Game::OtherMethod()
{
    Button* btn1 = new Button();
    Input_Functions.push_back(&A2_Game::EnterName); //The compiler told me to do this and it still won't compile the line..
    Input_Functions.push_back(btn1->DoInput);

    //Loop
}

我无法确定如何修复我的编译错误。我怀疑你们中的一些人可能会通过查看我在此处展示的内容直接告诉我需要更改/完成哪些内容才能编译。如果是 !true 那么这里是编译错误。

error C2664: 'std::deque<_Ty>::push_back' : cannot convert parameter 1 from 'bool (__thiscall A2_Game::* )(void)' to 'bool (__cdecl *const &)(void)'

error C3867: 'Button::Doinput': function call missing argument list; use '&Button::Doinput' to create a pointer to member

最佳答案

如果你想回推函数,你可以使用 std::function(如果你的编译器不支持 c++11,则使用 boost)

std::deque<std::function<bool()> > function_list;
Button* btn1 = new Button();
function_list.push_back([this](){return EnterName();});
function_list.push_back([btn1](){return btn1->DoInput();});

当您从 function_list 调用它时,确保 lambda 中的所有内容仍然有效。

编辑: 提升当量

std::deque<boost::function<bool()> > function_list;
Button* btn1 = new Button();
function_list.push_back(boost::bind(&A2_Game::EnterName,this));
function_list.push_back(boost::bind(&Button::DoInput,btn1));

关于c++ - 将函数/方法指针推送到双端队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24014898/

相关文章:

c++ - 变量值自行变化

c - 指向常量函数的指针是什么意思?

c - 在没有哨兵的情况下反转循环双端队列

Java双端队列toString方法覆盖左侧元素

c++ - 模板运算符<未调用

c++ - 为什么必须在哪里放置 “template”和 “typename”关键字?

C++:接受带有一个参数的任何函数的模板?

c++ - BFS 使用双端队列

android - 如何在 Android 上的崩溃转储中获得更多调用堆栈深度?

c - c 中意外的 printf 语句