C++,stl函数向量指针映射
问题描述:
我似乎在创建定义为主题的结构时遇到了一些问题。C++,stl函数向量指针映射
我的目标是创建一种事件处理程序(不管它是好的还是坏的程序设计,或者它不是多线程:目前只是为了实践)。
然后我的想法是创建一个指向函数的指针矢量,并将该矢量放置在一个映射中,其中的键是一个字符串。
我必须做一些概念性错误的,因为我得到一些奇怪的错误: 我的代码如下(误差在后):
.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*)> >&)'
答
1)std::vector
的insert()
方法通过使用迭代器指定位置来工作。对于你的情况,你可以使用push_back()
。
2)使用insert(std::make_pair(eventName, tmp))
并且将根据地图创建所需的值类型。
答
没有变化的std::vector::insert()
需要一个参数:全部采用一个迭代器来指示新元素必须先插入的位置。改为使用std::vector::push_back()
添加function
。
std::map::insert()
有一些变化,但您正在尝试使用一个取map
,它被定义为的value_type
:
value_type std::pair<const Key, T>
你的情况
的value_type
是std::pair<std::string, fPtrVector>
:
this->_listeners.insert(std::pair(eventName,tmp));
答
您在寻找
std::vector::push_back
(see the documentation forstd::vector
here)。您正在寻找
std::map::operator []
(see the documentation forstd::map
here)。
我觉得很蠢......谢谢大家的回答 – Stormsson 2012-08-07 09:23:33