zhuyongqi9
V2EX  ›  C++

用 C++ lambda 太爽了

  •  
  •   zhuyongqi9 · Nov 20, 2024 · 8917 views
    This topic created in 540 days ago, the information mentioned may be changed or developed.

    写 GUI 经常碰到需要使用 callback 来描述 event 发生时的 behavior ,在 callback 函数里面不可避免的要使用到某些变量,之前不用 lambda 需要把 callback 内引用的变量都作为全局变量,现在用了 lambda 之后可以直接变量捕捉,在 class method 内也能捕获 this 指针,用起来太爽了

    54 replies    2025-03-12 21:14:38 +08:00
    kera0a
        1
    kera0a  
       Nov 20, 2024 via iPhone   ❤️ 7
    写 c++ 的这么惨吗?
    AllenTsui
        2
    AllenTsui  
       Nov 20, 2024
    写 c++ 的这么惨吗?
    xe2vherd
        3
    xe2vherd  
       Nov 20, 2024
    写 c++ 的这么惨吗?
    orionl
        4
    orionl  
       Nov 20, 2024
    写 c++ 的这么惨吗?
    majiangjun
        5
    majiangjun  
       Nov 20, 2024
    写 c++ 的这么惨吗?
    Shaar
        6
    Shaar  
       Nov 20, 2024
    写 c++ 的这么惨吗?
    chunriyeqiukong
        7
    chunriyeqiukong  
       Nov 20, 2024
    写 c++ 的这么惨吗?
    fgsiveoneone
        8
    fgsiveoneone  
       Nov 20, 2024   ❤️ 5
    这不是 C++11 引入的吗?今夕是何年
    zhuyongqi9
        9
    zhuyongqi9  
    OP
       Nov 20, 2024 via iPhone
    纯纯惨了,以前写 js 的时候从来没考虑过这种问题
    zhuyongqi9
        10
    zhuyongqi9  
    OP
       Nov 20, 2024 via iPhone
    @fgsiveoneone 是的
    BBCCBB
        11
    BBCCBB  
       Nov 20, 2024
    写 c++ 的这么惨吗?
    ink19
        12
    ink19  
       Nov 20, 2024
    写 c++ 的这么惨吗?
    chingyat
        13
    chingyat  
       Nov 20, 2024
    为啥要用全局变量?就算不用 lambda 也应该给个 void *user_data 参数吧。
    zhuyongqi9
        14
    zhuyongqi9  
    OP
       Nov 20, 2024
    @chingyat 参数是指这种吗?
    void* (*f)(void *user_data);
    我想表达的意思是非函数参数的变量
    ugpu
        15
    ugpu  
       Nov 20, 2024   ❤️ 1
    以前:
    callBack() { getInstance().fun_a(); xxxx; dosomething..... } //安全的 low 了点
    callBack() { global_ptr->func(); } //天杀的 天塌了 全局指针指向的对象被销毁了.

    现在: obj.CallFunc([this]() { .a++; .b--; }

    由此可见 写 C++的是真的惨.
    ugpu
        16
    ugpu  
       Nov 20, 2024
    @zhuyongqi9
    尴尬的就是指针指向的对象 协同工作里都是其他模块的 崩的时候就是甩锅. 然后他说你不看文档.最后总结没有文档规范等等一系列问题.
    尤其长期维护工程 新员工进来 那叫一个惨.
    后来大家都用 全局变量 getInstance()->xxxx. 指针都给弄没了。 你说你要用 智能指针. 还是自己封装的. 结果用起来又内存泄露.
    CPP 被弃用的问题是 维护成本太高了... 业务码农还要关心技术 结构问题.成本高。 解决方案用指针和全局变量都是为了堵漏.
    zhuyongqi9
        17
    zhuyongqi9  
    OP
       Nov 20, 2024 via iPhone
    @ugpu hhhhhhhh
    ugpu
        18
    ugpu  
       Nov 20, 2024   ❤️ 1
    还有那种天杀的队友, 一个对象虚继承. A->b->c 析构函数也是虚函数, 他用完 销毁了 C. 别人还在用 B.
    万丈高楼轰然倒塌就是这么来的.
    要是扯设计 规范 用法 一群程序员有一群想法.
    我建议大家用 Java & Golang. CPP 真不适合团队协作. 单机王用 CPP 爽
    originals
        19
    originals  
       Nov 20, 2024
    用的时候挺爽的,就是优化等级高了后,崩了找不到地方
    snylonue
        20
    snylonue  
       Nov 20, 2024
    c++ 的 lambda 感觉挺啰嗦的
    zhuyongqi9
        21
    zhuyongqi9  
    OP
       Nov 20, 2024   ❤️ 2
    @ugpu 兄弟说的都是肺腑之言。自己写程序和合作开发软件完全是两码事,你想遵从规范,别人不一定想,如果一个项目没有一个强有力的人管理代码规范,后果就是五花八门,什么语言都差不多。曾经见过一个 python 项目两个人开发,类似的逻辑,一个人只用 async ,一个人只用 thread ,完全头大
    DOOMS
        22
    DOOMS  
       Nov 20, 2024
    还有不要直接捕获 this 指针 如果是 c++17 可以使用 std::enable_shared_from_this<T>::weak_from_this
    NessajCN
        23
    NessajCN  
       Nov 20, 2024
    流下了同情的泪水
    roundgis
        24
    roundgis  
       Nov 20, 2024 via Android
    @zhuyongqi9 cpp 就是用来过滤队友的
    cJ8SxGOWRH0LSelC
        25
    cJ8SxGOWRH0LSelC  
       Nov 20, 2024
    这段话, 中文夹杂着大量的英文单词, 有点香港电视剧的味道。 却也没有什么违和感。
    momo1999
        26
    momo1999  
       Nov 20, 2024
    小心生命期的大坑
    GeruzoniAnsasu
        27
    GeruzoniAnsasu  
       Nov 20, 2024


    7 年前我问的问题,那时候那个团队才刚用上 c++11 已经很离谱了

    OP 今年还问得出这个问题我觉得我对 c++技术栈离谱程度的理解还不够
    zhuyongqi9
        28
    zhuyongqi9  
    OP
       Nov 20, 2024
    @GeruzoniAnsasu 我没有问问题,这是陈述句
    penisulaS
        29
    penisulaS  
       Nov 20, 2024   ❤️ 1
    有的人的 C++写出来像 C ,有的人写出来像 Java ,有的人写出来像 Python ,就大概能看出这些人固定代码习惯是在哪几年了
    skallz
        30
    skallz  
       Nov 20, 2024
    @StinkyTofus 因为专业名词的中文翻译很多都很垃圾,不明所以,当初被定在耻辱柱上的鲁棒性就是如此,还不如英文原文容易看懂
    sir283
        31
    sir283  
       Nov 20, 2024 via Android
    @kzfile 真实,好在 c++足够强大,各种写法基本能适用,虽然可能抽象一些。
    skallz
        32
    skallz  
       Nov 20, 2024   ❤️ 1
    @kzfile 很正常,不要说 c++,java ,js ,python 等,很多代码写出来都能一眼看出是哪个生态的味道 233333 ,不同语言社区的主流风格区别蛮大的
    ca2oh4
        33
    ca2oh4  
       Nov 20, 2024
    c++ 11 都 10 多年了。。。
    calvinHxx
        34
    calvinHxx  
       Nov 20, 2024
    天翼 3G 真是太快了。
    chashao
        35
    chashao  
       Nov 20, 2024
    我们游戏引擎都是-std:c++latest 来着
    yuruizhe
        36
    yuruizhe  
       Nov 20, 2024
    @zhuyongqi9 py 这东西,人来写鬼来看,用在协作工程上简直不可维护,再给整个动态属性就更有意思了
    levelworm
        37
    levelworm  
       Nov 20, 2024 via Android
    @ugpu 应用层不用它就是了。还是更适合系统编程。
    liuliuliuliu
        38
    liuliuliuliu  
    PRO
       Nov 20, 2024   ❤️ 2
    那个啥?要不你试试 C#? 得爽到 GC
    EchoWhale
        39
    EchoWhale  
       Nov 20, 2024 via iPhone
    写 c++ 的这么惨吗?
    xuanbg
        40
    xuanbg  
       Nov 20, 2024
    C 艹最普遍的问题是执行 delete 无效造成内存泄露,光看代码很难确定泄漏点在哪。
    xuanbg
        41
    xuanbg  
       Nov 20, 2024
    @skallz 第一次看到鲁棒性这个词我真的是一头雾水,根本无法理解是个啥意思。更早的是“套接字”,也是无法理解。
    xjp
        42
    xjp  
       Nov 20, 2024
    python 、js 、java 表示很赞
    nnnnnnamgn
        43
    nnnnnnamgn  
       Nov 21, 2024
    老项目已经见过很多回调地狱了,新项目可能的话我都尽量推协程
    SHIINASAMA
        44
    SHIINASAMA  
       Nov 21, 2024
    致远星战况如何,说实话看到标题就没绷住
    yfeng445
        45
    yfeng445  
       Nov 21, 2024
    @StinkyTofus 因为里边都是专有名词 www
    FreeGuy
        46
    FreeGuy  
       Nov 21, 2024
    C++ 基本都是被逼着走,你看人家 Delphi 在小圈子里面依然发光发热,哪那么多语法糖,爱用不用!
    labubu
        47
    labubu  
       Nov 21, 2024
    都 2024 年了,你才用上 10 年前的标准?
    a764934018
        48
    a764934018  
       Nov 21, 2024
    哇,你也网上冲浪啊?
    cnbatch
        49
    cnbatch  
       Nov 21, 2024
    我一个月前抱怨 C++20 的支持度不佳 ( /t/1081936 ),想不到你才刚刚用上 C++11

    这么说吧,有了 lambda 只是大幅减轻了回调地狱的程度,但远未达到“爽”的地步
    nyxsonsleep
        50
    nyxsonsleep  
       Nov 23, 2024
    @levelworm 系统编程也是用 C
    levelworm
        51
    levelworm  
       Nov 23, 2024 via Android
    @nyxsonsleep C++还是不少的,其实 JVM 都好多。。。
    zhuyongqi9
        52
    zhuyongqi9  
    OP
       Nov 24, 2024
    @levelworm 我之前一直不知道 jvm 系统编程,想了解一下,能举一个例子吗
    levelworm
        53
    levelworm  
       Nov 24, 2024
    @zhuyongqi9 呃,比如 Spark ?
    deetincelle
        54
    deetincelle  
       Mar 12, 2025
    同 js 转 cpp, 先收藏为敬
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5537 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 277ms · UTC 08:23 · PVG 16:23 · LAX 01:23 · JFK 04:23
    ♥ Do have faith in what you're doing.