• lnydc
    2018-02-14
    版本一:
    电影(男主,女主) {
            男主杀死了女主
    }

    版本二:
    电影(男主,女主,情节(A,B){A爱上了B}){
            情节(男主,女主)
    }
    展开
    
     27
  • kingeasternsun
    2018-04-12
    《STL源码解析》,《inside c++model》,记得当时啃这两本时经常要感叹怎么设计的这么精妙,了解内部实现方式后,在使用的时候也更加心里有底
    
     11
  • 闫飞
    2018-01-10
    泛型技术是静态系统所独有的特性,本质上我觉得还是为了兼顾执行效率和编程灵活性,实现零成本抽象这一刀尖上跳舞的巨大挑战。

    较新的语言标准还提炼了很多基础设施,比如大量使用SFINAE并泛化之,提供enable if, constexpr if, 乃至自动类型推断和concept check,和Java那边的套路是完全不一样的。

    可以说不深入理解泛型技术基本,就不能很好理解现代的C++了。
    展开
    
     7
  • edisonhuang
    2019-06-18
    C++通过范型消除了C语言中很多易出bug的代码,实现代码重用。其中关键在于:算法的泛型;类型的泛型;数据结构(数据容器)的泛型。
    C++通过类,在构造和析构函数中做资源的申请释放,通过引用解决了用指针来取值的问题。通过操作符的重载让算法代码忽略具体类型,可以有统一的表达。通过类似迭代器的范型容器来统一不同数据结构的统一算法表达。
    通过抽象算法中函数的操作,用函数式编程的方式,实现算法的泛型。
    总之,通过不同粒度的抽象,而让代码重用更容易,bug更少,更好维护和扩展
    
     4
  • CH_G318
    2019-01-24
    有些代码跑不通,总是报错,现在修改成下面的样子了:
    template<class T, class Cond>
    struct counter {
        Cond cond; // 添加一个变量
        size_t operator()(size_t c, T t) {
            return c + (cond(t) ? 1 : 0); // 使用变量进行判断
        }
    };


    template<class Iter, class Cond>
    size_t count_if(Iter begin, Iter end, Cond c) {
        auto op = counter<typename Iter::value_type, Cond>{c}; // 初始化counter结构体
        return reduce(begin, end, size_t(0), op);
    }
    展开
    
     3
  • 知知知了
    2018-06-02
    counter结构体有点问题,调了半天。 如果刚上大学能看到耗子书的文章就好了,看谭浩强学的c和c++真浪费生命,编程还沦为了二流,唉
    
     3
  • 郑杰
    2018-01-09
    可以讲讲java的类型擦除原理吗
    
     3
  • caohuan
    2018-11-07
    耗子哥 一步步的抽象过程,让我想到了C#和java都是面向对象语言,都有抽象的说法,比如 类为对象的抽象,接口为 类的抽象,有了抽象的思维,会让实现变得友好,逻辑也清晰,耗子哥的专栏也是这样的设计思想。
    
     2
  • saiyn
    2018-05-31
    从c到c++的发展过程,让我深刻理解了迭代器是个什么鬼,感谢耗子叔
    
     2
  • 夏洛克的救赎
    2018-05-20
    如何理解aop
    
     2
  • 上上签
    2018-02-14
    认真仔细学习,才觉得真是很不错的,不白付费。
    
     2
  • JK.Ryan
    2018-01-11
    写的很赞👍🏾,感觉也可以顺带讲一下Go的接口,对比多语言可以更加突出“范式”:)

    作者回复: 后面会有的

    
     2
  • Join
    2018-01-10
    读起来真是太享受了,感觉之前看的那些STL知识被瞬间点燃了,以前思考并未达到这样的深度,能做到将技术和业务逻辑分离开的代码真是太通用了,现在回去再读一遍STL源码解析会更有体会
    
     2
  • 云学
    2018-01-09
    恰巧不久前实现过迭代器,所以读起来非常享受
    
     2
  • Geek_e5dad7
    2019-10-22
    看到大家都说看的很享受,但是我真的看不懂😭
     1
     1
  • karas
    2019-06-07
    实在不怎么懂cpp,对标Java说一点。感觉cpp做到通用操作最重要的是操作符重载,比如上面的累加的实现主要就是靠++重载定义next(),*重载定义怎么取对象的值,+重载定义累加的逻辑。对标Java,Java没有操作符重载,他主要依赖接口去规约必要的通用操作。比如一般容器会实现iterator接口,涉及到排序则要求<T extends Comparator>类型参数。凭直觉来讲,操作符可能更加灵活一点。
    另外最后介绍的函数参数,应该算是Java里的匿名类吧,当然j8也可以用lambda了,不过我倒觉得这和泛型无关吧,算是函数式的概念。
    
     1
  • 桃子妈妈
    2019-06-06
    大神就是把复杂的知识简单化的讲解出来,好厉害
    
     1
  • 不记年
    2019-06-04
    将泛型做到极致的算法我觉得就是一些方法调用的集合,并且调用的方法完全隐藏类型的实现,也就是说从算法内部完全获得不到传入参数的信息。这些方法调用所体现的语义与算法的名字是等价的。
    
     1
  • escray
    2019-05-30
    曾经啃过 C++ Prime,也翻过 Thinking in C++,不过一直没有使用 C++ 写过真实的业务实现代码,所以始终处于 C++ 菜鸟的境地。

    从这篇文章中,终于知道 C++ 的出现,并不是简单的增加了所谓“面向对象”的特性,而是在很大程度上采用泛型编程来解决 C 语言在工程实现上面临的一些问题。

    我个人比较偏好 C# 或者 Ruby 一类的语言,相对来说,这两种语言更贴近与业务逻辑,对于底层的依赖不多,但是感觉在某种意义上也实现了“泛型编程”范式,不知道这样理解是否正确。

    另外,对于电影的那则留言,版本三似乎可以是:

    电影(人物1, 人物2, 群演, 情节(A,B)){
      情节(人物1, 人物2, 群演)
    }

    主要区别在于情节是可以通过函数调用传递过来,由拍电影的人决定采用什么样的情节。
    展开
    
     1
  • 郁
    2018-02-28
    好久没看到谈编程范式的文章了,回忆起当初看《多范式编程》那本书,还是看本文更有感触
    
     1
我们在线,来聊聊吧