在 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 = {};