gpt4 book ai didi

c++ - 构建并执行一堆 void 函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:31:51 27 4
gpt4 key购买 nike

我正在尝试存储函数 vector (或堆栈)。这个想法是我有一系列的功能可以在主窗口中添加和删除小部件。我使用定时器闹钟,每当调用闹钟时,我都会调用函数堆栈顶部的函数。

所以我的函数将始终是 void 类型。我的问题/误解是如何删除 STL::stack 的 void 函数以及如何执行该函数?

class InstructionScreen
{

std::stack <void*> instructionSteps; // is this how I declare a stack of functions

void runTimerEvent()
{
if ( !instructionSteps.empty() )
{
// call the function at the top of the stack
// how do I call the function?
(*instructionSteps.top()); // is that how?
instructionSteps.pop();
}
}

void step1()
{
// here I create some widgets & add them to the main window
}

void step2()
{
// delete widgets from window
// create some different widgets & add them to the main window
}

void buildStack()
{
instructionSteps.push( (&step1()) ); // is this correct?
instructionSteps.push( (&step2()) );
}

};

最佳答案

void* 指针不是合法的函数指针。它应该是 void (*)(),它可以通过 typedef void (*stack_function)() 变得更好。

std::stack<stack_function> instructionSteps;

要将某些东西压入其中,您不调用该函数(就像您对 step1() 所做的那样),并且您当然不获取返回地址(无论如何都是空的)就像使用 &step1() 一样,您只需单独使用函数名称:

instructionSteps.push(step1); // the & can be omitted for free functions
instructionSteps.push(&step2); // equivalent to the above, only a different function

要从堆栈顶部调用东西,您实际上需要调用:

(*instructionSteps.top())();
// you missed that -- ^^

取消引用也可以省略,原因在这里解释太久,搜索 SO。 :)

instructionSteps.top()();

关于c++ - 构建并执行一堆 void 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6515810/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com