从容器中检索函数指针

时间:2013-06-08 09:09:16

标签: c++ containers function-pointers

我认为如果我把代码放在首位会更有意义:

我有一个成员变量定义如下:

std::queue<void (*)()> fptrs;

...我正试图像这样弹出一个指针:

void (*f)() = fptrs.pop();

我得到的'警报'是:

Assigning to 'void (*)()' from incompatible type 'void'

似乎我没有将函数指针放入我的队列中,或者它们正在弹出奇怪的变换。无论哪种方式,我都不确定如何解决这个问题,而且我已经摆弄了一下。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

std::queue::pop()返回void。您需要拨打std::queue::front(),然后拨打std::queue::pop()

为了便于阅读,我建议使用typedef作为函数指针。

答案 1 :(得分:0)

#include <iostream>
#include <queue>
using namespace std;

typedef void (*pFun)();

void fun1(){ printf("fun1\n"); }
void fun2(){ printf("fun2\n"); }
int main()
{
    queue<pFun> d;
    d.push(fun1);
    d.push(fun2);

    pFun fun = d.front();
    fun();
}