C++,指向函数向量的指针的STL映射
c++, stl map of pointers to functions vectors
我在创建定义为主题的结构时似乎遇到了一些问题。
我的目标是创建一种事件处理程序(不管它是好编程还是坏编程,或者它不是多线程:目前只是为了练习)。
然后我的想法是创建一个指向函数的指针向量,并将该向量放在映射中,其中键是一个字符串。
我一定是在概念上做错了什么,因为我得到了一些奇怪的错误:我的代码如下(错误在最后):
.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;
。
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));
1) std::vector
的insert()
方法通过使用迭代器指定位置来工作。对于您的情况,您可以使用 push_back()
.
2) 使用 insert(std::make_pair(eventName, tmp))
,这将通过映射创建所需的值类型。
-
您正在寻找
std::vector::push_back
(请参阅此处的文档以获取std::vector
)。 -
您正在寻找
std::map::operator []
(请参阅此处的文档以获取std::map
)。
- 删除包含包含动态对象的 STL 容器的智能指针
- 是否有一种 STL 算法可以最后找到,但它也适用于指针?
- STL 函数和函数类型与函数指针类型
- C++ STL 数据结构常时按索引推送/弹出/随机访问,并具有指向元素的可靠指针
- 如何在C++中重新实现包含指针的 STL 容器的类的迭代器
- 如何避免自定义 STL 向量类的智能指针 delete[] 异常?
- 用于 STL 迭代器、指针和 std::nullptr_t 的模板函数
- 通过函数指针对类内的 STL SET 使用自定义比较器
- STL映射比较器能否以某种方式获取指向映射本身的指针?
- 指针类型上的 STL 函数对象
- 清除 C++ 中的指针的 STL 列表
- 限制指针访问STL ::向量元素
- 有没有一种 stl 方法来执行指针向量的深度复制
- 析构函数在与 STL 的共享指针中调用两次
- 指向类的指针的 STL 映射的 SWIG 类型图
- C 指针数组使用STL开始和结束
- 使用带有COM接口的STL智能指针
- STL 算法 + c'tor 不再适用于指向 C 数组的原始指针,因为指向一个过去的末端
- 多态性和STL容器.指针是不必要的
- 如何用类指针(STL)初始化向量