在 unordered_map 中按字符串键查找 std::function
Find std::function by string key in unordered_map
这个有效:
std::unordered_map<std::string, int> m = {};
auto c = m.find(typeName);
if (c == m.end())
{
}
这个有效:
std::unordered_map<std::string, std::string> m = {};
auto c = m.find(typeName);
if (c == m.end())
{
}
这行不通:
std::unordered_map<std::string, std::function<void>> m = {};
auto c = m.find(typeName);
if (c == m.end())
{
}
==
显示为错误:
In template: implicit instantiation of undefined template 'std::function' error occurred here (declaration of _T2 second
inside inside pair
)
在模板实例化中 class 'std::pair<const std::string, std::function>' 此处请求
在模板实例化中 class 'std::__hash_value_type<std::string, std::function>' 这里请求模板在这里声明
P.S。如果没有办法让它工作,还有其他方法可以通过字符串键存储 std::function 吗?
std::function
需要函数类型作为模板参数,而 void
不是。例如,如果该函数什么都不带, returns void
那么它应该是
std::unordered_map<std::string, std::function<void()>> m = {};
这个有效:
std::unordered_map<std::string, int> m = {};
auto c = m.find(typeName);
if (c == m.end())
{
}
这个有效:
std::unordered_map<std::string, std::string> m = {};
auto c = m.find(typeName);
if (c == m.end())
{
}
这行不通:
std::unordered_map<std::string, std::function<void>> m = {};
auto c = m.find(typeName);
if (c == m.end())
{
}
==
显示为错误:
In template: implicit instantiation of undefined template 'std::function' error occurred here (declaration of _T2 second
inside inside pair
)
在模板实例化中 class 'std::pair<const std::string, std::function>' 此处请求
在模板实例化中 class 'std::__hash_value_type<std::string, std::function>' 这里请求模板在这里声明
P.S。如果没有办法让它工作,还有其他方法可以通过字符串键存储 std::function 吗?
std::function
需要函数类型作为模板参数,而 void
不是。例如,如果该函数什么都不带, returns void
那么它应该是
std::unordered_map<std::string, std::function<void()>> m = {};