【问题标题】:Return a functor based on command line input [closed]根据命令行输入返回函子[关闭]
【发布时间】:2020-10-31 22:45:33
【问题描述】:

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

【问题讨论】:

标签: c++ lambda functor


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-04-19
    • 1970-01-01
    • 2023-01-10
    • 2020-04-07
    • 2011-12-11
    • 1970-01-01
    • 2017-08-01
    • 2020-06-12
    • 2019-02-05
    相关资源
    最近更新 更多