我有一个map<string, std::function<void(AgentMessage&)>>
(AgentMessage是一个带有几个字符串的结构)。当我尝试使用迭代器访问它时,我在pair
的复制函数上遇到访问冲突。
注意:std :: function指向的函数位于与复制位置不同的dll中。
编辑:我认为解释对于一段简单的代码来说已经足够了,但仍然 - 这就是它。
for (map<string, std::function<void(AgentMessage&)>>::iterator it = mapRef.begin(); it != mapRef.end(); it++)
{
auto functionCopy = it->second; // IT CRASHES HERE
}
答案 0 :(得分:1)
您能否显示将元素插入地图的代码?
我试过这个并且有效:
#include <functional>
#include <map>
#include <string>
using namespace std;
struct AgentMessage
{
};
void f(AgentMessage& am)
{
}
void g(AgentMessage& am)
{
}
int main()
{
AgentMessage am;
map<string, std::function<void(AgentMessage&)>> m;
m["f"] = f;
m["g"] = g;
for (map<string, std::function<void(AgentMessage&)>>::iterator it = m.begin(); it != m.end(); ++it)
{
auto func = it->second;
func(am);
}
}