如何在C++中将可调用对象放入地图中?
How can I put a callable object into the map in C++?
我很困惑为什么它不能以这种方式使用。有没有办法实现类似的函数调用?我很困惑为什么不能以这种方式使用它。有没有办法实现类似的函数调用?
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;
}
您可以将可调用对象放在映射或其他容器中,就像处理任何其他数据一样:它们必须属于同一类型。
似乎您的 lambda 可以转换为的类型对于 MD5 和 CRC32std::function<std::string(std::string)>
,对于 RSAstd::function<std::string(std::string, std::string)>
。两者都与您在映射中定义的类型(即std::function<std::string()>
(不匹配。
RSA 与其他产品之间的差异在您的设计中是一个真正的问题。例如,你应该如何编写如下所示的函数:
std::string format_data(std::string algo, std::string data)
{
return FUNCS[algo](data, ¿¿¿ maybe also "some key" ???);
}
映射中的函数定义为:
std::function<std::string()
这意味着,不需要参数并返回一个 std::string... 您可以按照解决方法定义为将 2 个字符串作为参数,并忽略 MD5 和 CRC32 的 lambda 代码中的第二个字符串
std::map<std::string, std::function<std::string(std::string, std::string)>> FUNCS;
--
FUNCS["MD5"] = [](std::string data, std::string) { return std::string("MD5 : ") + data; };
FUNCS["CRC32"] = [](std::string data, std::string) { 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;
相关文章:
- 如何从地图中删除矢量对象
- 跨多个对象使用地图
- 如何制作带有对象的多重地图? - C++
- 将对象放入地图后打印对象
- 如何在C++中将可调用对象放入地图中?
- C++ 在地图上循环 - 消失的对象
- 为什么地图需要实现'operator<'以及如何比较对象?
- 在地图上启动对象的正确方式
- 按unique_pointer将传递的对象存储在地图中
- 为什么我不能在 c++ 中将对象插入到地图中
- 如何调用返回双精度或字符串并将其保存在地图上但作为对象的类的方法
- 在多线程环境中交换C 地图对象
- 在C 地图中使用对象作为密钥和值
- 从地图访问对象会导致新对象C 的实例化
- 无法访问/存储地图中的游戏状态对象
- 在C++中向地图添加对对象的引用
- 使用什么数据结构来存储基于游戏对象的二维单元地图?
- 是 std::make_pair 在将对象添加到地图时创建副本
- 通过参考从地图获取对象
- 通过EMPLEPE()将对象指针插入地图中