C++ 声明一个函数指针数组

标签 c++

基本上我需要实现一个事件处理程序类,但遇到无法声明空数组的错误:

class SomeClass
{
public:
    void registerEventHandler(int event, void (*handler)(std::string));

private:
    // here i get this error: declaration of ‘eventHandlers’ as array of void
    void (*eventHandlers)(std::string)[TOTAL_EVENTS];
}

void SomeClass::registerEventHandler(int event, void (*handler)(std::string))
{
    eventHandlers[event] = handler;
}



void handler1(std::string response)
{
    printf("ON_INIT_EVENT handler\n");
}
void handler2(std::string response)
{
    printf("ON_READY_EVENT handler\n");
}

void main()
{
    someClass.registerEventHandler(ON_INIT_EVENT, handler1);
    someClass.registerEventHandler(ON_READY_EVENT, handler2);
}

你能帮我弄清楚确切的语法吗? 谢谢!

最佳答案

这不是空数组。它是函数指针数组。 您应该按如下方式定义它:

void (*eventHandlers[TOTAL_EVENTS])(std::string);

或更好(C++14):

using event_handler = void(*)(std::string);
event_handler handlers[TOTAL_EVENTS];

或者C++03:

typedef void(*event_handler)(std::string);
event_handler handlers[TOTAL_EVENTS];

但我宁愿推荐使用 vector 来做:

using event_handler = void(*)(std::string);
std::vector<event_handler> handlers;

关于C++ 声明一个函数指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28341154/

相关文章:

c++ - 来自元组的构造函数参数

c++ - 为什么在初始化堆栈时会出现此错误?

c++ - 未定义/未指定/实现定义的行为警告?

c++ - 使用 Visual Studio 2013 和 Intel Fortran 使用 Fortran 编译混合 C++/C 代码

c++ - 要求的引用折叠规则的简明解释 : (1) A& & -> A& , (2) A& && -> A& ,(3) A&& & -> A& ,以及 (4) A&& && -> A&&

c++ - 基于唯一类型 id 比较两个 uint64_t 之间的多个位总是返回 true

c++ - "object"中的 "object file"是什么,为什么这样调用它?

c++ - 快速排序线性时间?

C++ Boost Spirit,解析数据并存储最大值

c++ - 构造类成员时消除拷贝