c++ - 根据命令行输入返回仿函数

标签 c++ lambda functor

关闭。这个问题需要details or clarity .它目前不接受答案。












想改进这个问题?通过 editing this post 添加详细信息并澄清问题.

1年前关闭。




Improve this question




从命令行输入,我收到一个 '='、'<' 或 '>' 的单个字符,后跟一个值,我的目标是使用自定义仿函数(例如使用 remove_if)迭代和修改我的底层数据容器.简单但缓慢的解决方案是拥有一个使用输入 char 构造的仿函数,并在其中的运算符之间切换。但是,这需要在每次调用仿函数的运算符时检查运算符类型。我的第一个解决方案是在 char 上使用 switch 语句并创建一个具有 3 个派生类的基础仿函数类。然而,我意识到虽然这是一个完全可行且快速的解决方案,但我最终得到了大量的 switch 语句代码重复。我尝试解决这个问题是使用多态性并具有一个接受输入字符并返回具有虚拟 () 运算符的基类指针的函数。但是,当我传递取消引用的基类指针时,它不会接受纯 virtual() 运算符,并且不会被派生类的运算符覆盖。从某种意义上说,我想要一个返回与输入字符的值相关联的特定 lambda 或比较器的函数。什么是解决这个问题的好方法?

最佳答案

由于 lambdas 有自己的类型,我不知道如何构造一个返回不同 lambdas 的函数。您可以将它们存储在 std::函数中并支付开销。
我认为函数 ptr 和 map 的组合可能是一个很好的解决方案。考虑使用 constexpr 映射(如 https://youtu.be/INn3xa4pMfg 中),创建您的函数并将映射存储在该映射中。
请注意,您还可以使用 ClosureType::operator ret(*)(params)() 将非捕获 lambda 转换为函数 ptr (见 https://en.cppreference.com/w/cpp/language/lambda)。

关于c++ - 根据命令行输入返回仿函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64627097/

相关文章:

functional-programming - SML 使用带有签名的 abstype

c++ - 如何将 unsigned long 转换为 64 位的 time_t

C++ 聊天客户端缺少 lib 文件

c++ - 为什么 "std::async"没有按预期工作?

c# - 如何使 EqualityComparer 与两个字段进行比较?

haskell - 如何在haskell中fmap元组的第一个元素

c++ - 如何强制仿函数查看整个 thrust::vector 以便可以进行排序?

带有变量和类型的 C++03 宏定义?

c++ - LLVM 中的非指针全局变量

c# - 如何捕获 Action<T> 中的异常或包含 C# 中的匿名方法的异常?