c++ - Vector of Vector of (member) 函数指针

标签 c++

我正在为我当前的实验项目构建一个简单的监听器/回调机制。而且我坚持实现一个容器结构,它看起来应该是指针 vector 的 vector 。我选择这种方式是因为我希望根 vector 简单地具有事件类型的 KEY 让我们说是一个枚举 (int),然后在这个键上我想存储指向此事件类型的可用方法的指针 vector 。在逻辑表示中是这样的:

[EVENT_TYPE_QUIT]
                 [ptr1]
                 [ptr2]
                 [ptr3]
                 [ptr4]
                 [....]
[EVENT_TYPE_HELLO]
                 [....]
                 [....]

typedef enum {
   EVENT_TYPE_QUIT,
   EVENT_TYPE_HELLO,
   ...
} EventType;

所以简化的实现看起来像这样(它实际上是一个模板,但想象 T 是您可以映射事件的任何用户类型)。

class EventMapper {
    ...

    typedef void (T::*functionPtr)(); // simple pointer to T member function with no args.

    std::vector< std::vector<functionPtr> > eventCallbacks;

    void mapEvent(const EventType type, functionPtr callback) {

        // here i need to map type to callback
        // each type can have multiple callbacks
        // T can have only distinct event types as "key"

        // this i tried but doesn't work

        eventCallbacks[type].push_back(callback);

    }

    ...
}

预期的实现看起来像这样:

EventMapper<SupaDupaClass> mapper;
mapper.mapEvent(EVENT_TYPE_HELLO, &SupaDupaClass::didYouSayHello);

等...

我真的很想使用 vector 而不是 map 来更轻松地分配唯一键吗? 谢谢

最佳答案

如果我没看错你的代码,你正在访问一个未初始化的条目。

你应该首先用空 vector 初始化 eventCallbacks,比如

eventCallbacks.assign(10,std::vector())

关于c++ - Vector of Vector of (member) 函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15178070/

相关文章:

c++ - 编写宏

c++ - Visual Studio malloc 限制

c++ - C 字符串和删除 - 它们究竟是如何工作的?

c++ - vector<bool> 上的按位运算

c++ - STL 的高性能替代品?

c++ - 自由(): invalid pointer when implementing erase() of vector

c++ - OpenGL Scaling/Translation 坐标系或语句顺序错误

c++ - 如何重载运算符==?

c++ - 使用/购买Qt SDK(包括Qt Creator等)

c++ - 线程函数中的通用引用