V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
csfreshman
V2EX  ›  C++

C++中根据传入的字符串顺序执行函数

  •  
  •   csfreshman · 2021-10-09 00:25:42 +08:00 · 2141 次点击
    这是一个创建于 1141 天前的主题,其中的信息可能已经有所发展或是发生改变。

    晚上有个沙雕需求,上游请求传过来一个字段,比如是"1;3;2;4;5;6;9;" 那么我按照顺序执行函数 f1(xx),f3(xx),f2(xx)……f9(xx)

    伪代码:

    exec_vec = phrase_exec_conf(xxxx);
    for(int i = 0;i < exec_vec.size();i++)
        call_func(exec_vec[i]);
    

    我晚上自己写了下,不优雅,很垃圾,请教下各位在 C/C++中有没有优雅点的实现?

    13 条回复    2021-10-10 06:26:38 +08:00
    binux
        1
    binux  
       2021-10-09 00:27:34 +08:00 via Android
    怎么不优雅了?
    csfreshman
        2
    csfreshman  
    OP
       2021-10-09 00:29:23 +08:00
    @binux 自我感觉垃圾,一会贴上来你看下,C++写的少一些。
    msg7086
        3
    msg7086  
       2021-10-09 05:54:15 +08:00
    写一堆 lambda 扔进数组里然后取下标执行?
    ysc3839
        4
    ysc3839  
       2021-10-09 06:54:00 +08:00 via Android
    请放完整代码,仅凭现在提供的代码没法确定最佳方案。
    T0kvgh
        5
    T0kvgh  
       2021-10-09 07:52:55 +08:00
    std::map< int, std::function< void() > 之前这样稀奇古怪的用过
    muzuiget
        6
    muzuiget  
       2021-10-09 08:32:21 +08:00
    1. 粗暴,写很多 if 语句
    2. 优雅,定义一套 DSL
    3. Lua 帮到你
    shawnsh
        7
    shawnsh  
       2021-10-09 09:00:29 +08:00 via Android
    函数指针加队列
    2i2Re2PLMaDnghL
        8
    2i2Re2PLMaDnghL  
       2021-10-09 09:40:55 +08:00
    格林斯潘第十定律
    csfreshman
        9
    csfreshman  
    OP
       2021-10-09 11:42:19 +08:00
    @T0kvgh 这不是稀奇古怪的用法,这很常见吧。
    csfreshman
        10
    csfreshman  
    OP
       2021-10-09 11:43:08 +08:00
    @ysc3839 昨天睡着忘了贴了,晚上回去贴下我写的 3 个方式。
    LANB0
        11
    LANB0  
       2021-10-09 19:57:14 +08:00
    @msg7086 并不需要 lambda 呀,直接函数指针数组就好了。做协议解析时这不是常规操作吗
    msg7086
        12
    msg7086  
       2021-10-10 01:07:26 +08:00
    @LANB0 确实不需要,不过 lambda 也可以做吧,道理应该是一样的。
    (我不太懂 C++,请见谅。)
    c0xt30a
        13
    c0xt30a  
       2021-10-10 06:26:38 +08:00
    感觉这已经是最干净利落的处理方式了,还是不要想着再加戏了吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1047 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 19:28 · PVG 03:28 · LAX 11:28 · JFK 14:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.