我似乎在创建定义为主题的结构时遇到了一些问题。

我的目标是创建一种事件处理程序(无论编程的好坏,或者它是否不是多线程的,这都只是练习)。

然后,我的想法是创建一个指向函数的指针的矢量,并将该矢量放置在键为字符串的映射中。

我一定在做一些概念上错误的事情,因为出现一些奇怪的错误:
我的代码如下(错误在最后):

.h file
//ptr to function
typedef int (*pt2Function)(void*);
typedef std::vector<pt2Function> fPtrVector;

class eventDispatcher
{

public:
    //stuff
    void addListener(std::string,pt2Function);

protected:
    //stuff
     std::map<std::string,fPtrVector> _listeners;
};


这是cpp:

.cpp file

void eventDispatcher::addListener(std::string eventName ,pt2Function function)
{
  std::map<std::string,fPtrVector>::iterator it;

  it=this->_listeners.find(eventName);
  if(it != this->_listeners.end())
  {
//do something
  }
  else
  {
    std::vector<pt2Function> tmp;
    tmp.insert(function);  // here occurs error 1

    this->_listeners.insert(eventName,tmp);  // here occurs error 2
    std::cout<<"cnt: "<< this->_listeners.count();
  }


}

我得到的错误是:

1)  no matching function for call to 'std::vector <int (*)(void*), std::allocator<int (*)(void*)> >::insert(int (*&)(void*))'

2)  no matching function for call to 'std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int (*)(void*), std::allocator<int (*)(void*)> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int (*)(void*), std::allocator<int (*)(void*)> > > > >::insert(std::string&, std::vector<int (*)(void*), std::allocator<int (*)(void*)> >&)'

最佳答案

如果检查对insert的引用,则会看到它带有两个参数,一个迭代器和一个值。要仅添加一个值,请使用例如push_back

对于地图,可以改用_listeners[eventName] = tmp;

10-08 04:44