gpt4 book ai didi

c++,指向函数 vector 的指针的STL映射

转载 作者:太空宇宙 更新时间:2023-11-04 16:26:09 25 4
gpt4 key购买 nike

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

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

然后我的想法是创建一个指向函数的指针 vector ,并将这个 vector 放在一个映射中,其中键是一个字符串。

我一定是在做一些概念上的错误,因为我得到了一些奇怪的错误:我的代码如下(错误在最后):

.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相反。

对于 map ,您可以使用 _listeners[eventName] = tmp; 代替。

关于c++,指向函数 vector 的指针的STL映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11842360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com