我很困惑为什么它不能以这种方式使用。有没有办法实现类似这样的函数调用?我很困惑为什么不能这样使用。有没有办法实现类似这样的函数调用?
std::map<std::string, std::function<std::string()>> FUNCS;
void test_map_operator()
{
FUNCS["MD5"] = [](std::string data) { return std::string("MD5 : ") + data; };
FUNCS["CRC32"] = [](std::string data) { return std::string("CRC32 : ") + data; };
FUNCS["RSA"] = [](std::string data, std::string key) { return std::string("RSA : ") + data + key; };
std::cout << FUNCS["MD5"]("hello") << std::endl;
std::cout << FUNCS["CRC32"]("hello") << std::endl;
std::cout << FUNCS["RSA"]("hello","world") << std::endl;
}
最佳答案
您可以像处理任何其他数据一样将可调用对象放入 map 或其他容器中:它们必须属于同一类型。
看起来你的 lambda 可以转换成的类型是 std::function<std::string(std::string)>
对于 MD5 和 CRC32,它是 std::function<std::string(std::string, std::string)>
对于RSA。两者都不匹配您在 map 中定义的类型,即 std::function<std::string()>
.
RSA 与其他算法之间的区别是您设计中的一个真正问题。例如,您应该如何编写如下函数:
std::string format_data(std::string algo, std::string data)
{
return FUNCS[algo](data, ¿¿¿ maybe also "some key" ???);
}
关于c++ - 如何将可调用对象放入 C++ 中的映射中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62156183/