现代C++实战30讲
吴咏炜
前 Intel 资深软件架构师
立即订阅
3995 人已学习
课程目录
已更新 33 讲 / 共 33 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (2讲)
开篇词 | C++这么难,为什么我们还要用C++?
免费
课前必读 | 有关术语发音及环境要求
基础篇 (9讲)
01 | 堆、栈、RAII:C++里该如何管理资源?
02 | 自己动手,实现C++的智能指针
03 | 右值和移动究竟解决了什么问题?
04 | 容器汇编 I:比较简单的若干容器
05 | 容器汇编 II:需要函数对象的容器
06 | 异常:用还是不用,这是个问题
07 | 迭代器和好用的新for循环
08 | 易用性改进 I:自动类型推断和初始化
09 | 易用性改进 II:字面量、静态断言和成员函数说明符
提高篇 (11讲)
10 | 到底应不应该返回对象?
11 | Unicode:进入多文字支持的世界
12 | 编译期多态:泛型编程和模板入门
13 | 编译期能做些什么?一个完整的计算世界
14 | SFINAE:不是错误的替换失败是怎么回事?
15 | constexpr:一个常态的世界
16 | 函数对象和lambda:进入函数式编程
17 | 函数式编程:一种越来越流行的编程范式
18 | 应用可变模板和tuple的编译期技巧
19 | thread和future:领略异步中的未来
20 | 内存模型和atomic:理解并发的复杂性
实战篇 (7讲)
21 | 工具漫谈:编译、格式化、代码检查、排错各显身手
22 | 处理数据类型变化和错误:optional、variant、expected和Herbception
23 | 数字计算:介绍线性代数和数值计算库
24 | Boost:你需要的“瑞士军刀”
25 | 两个单元测试库:C++里如何进行单元测试?
26 | Easylogging++和spdlog:两个好用的日志库
27 | C++ REST SDK:使用现代C++开发网络应用
新年特别策划 (2讲)
新春寄语 | 35年码龄程序员:人生漫长,走点弯路在所难免
新春福利 | C++好书荐读
未来篇 (2讲)
28 | Concepts:如何对模板进行约束?
29 | Ranges:无迭代器的迭代和更方便的组合
现代C++实战30讲
登录|注册

28 | Concepts:如何对模板进行约束?

吴咏炜 2020-02-05
你好,我是吴咏炜。
从这一讲开始,我们进入了未来篇,展望一下即将在 C++20 出现的新功能。我们第一个要讨论的,是 concepts(概念)——一个难产了很多年才终于进入 C++ 的新功能。

一个小例子

老规矩,要讲“概念”,我们先看例子。
我们知道 C++ 里有重载,可以根据参数的类型来选择合适的函数。比如,我们可以定义 half 对于 intstring 有不同的作用:
int half(int n)
{
return n / 2;
}
string half(string s)
{
s.resize(s.size() / 2);
return s;
}
初看,似乎重载可以解决问题,但细想,不对啊:除了 int,我们还有差不多的 shortlong 等类型,甚至还有 boost::multiprecision::cpp_int;除了 string,我们也还有 wstringu16stringu32string 等等。上面的每个函数,实际上都适用于一族类型,而不是单个类型。重载在这方面并帮不了什么忙。
也许你现在已经反应过来了,我们有 SFINAE 啊!回答部分正确。可是,你告诉我你有没有想到一种很简单的方式能让 SFINAE 对整数类型可以工作?Type traits?嗯嗯,总是可以解决的是吧,但这会不会是一条把初学者劝退的道路呢?……
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《现代C++实战30讲》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(1)

  • 胡闯歌
    吴老师,你好,我问一个与此文章无关的,一个GDB调试的问题:
    一个网络多线程服务,一个socket一个线程。有一个共享变量用boost的unordered_map,同步也用boost的unique_lock
    程序在运行时基本正常,但在gdb调试时只要打印共享变量(即使里面没有数据),就会收到SIGSEG,调试其它变量或用下面的步骤就没事
    1 handle SIGPIPE nostop noprint
    2 set print elements 0
    3 将共享的变量的类型变为 stl的map
    问题:
      这种情况产生的主要原因是什么,用了boost的 hash map吗,和屏蔽管道关系有多大?

    作者回复: 没遇到类似问题,不熟悉。建议到 Stack Overflow 上去问,最好描述清楚环境,并且有一个最小的测试程序。

    一般而言,网络程序和多线程程序要做好单元测试,也只有单元测试可以在调试器里顺利进行。完整系统的调试多靠记日志和分析。

    2020-02-05
    1
收起评论
1
返回
顶部