公众号:张小飞那些事儿
25-模板的调试 25-模板的调试
浅实例化(Shallow Instantiation) 模板出错时通常伴随着冗长的诊断信息,真正的问题一般出现在一长串实例化之后 template<typename T> void f1(T& p) { *p = 0;
24-表达式模板 24-表达式模板
表达式模板是为了支持一种数值数组的类引入的技术。比如希望像内置类型一样对数组进行下列操作,要在支持这种紧凑写法的同时获得高效率,就需要通过表达式模板来完成。表达式模板与元编程互补,元编程主要用于小的、大小固定的数组,表达式模板则用于能在运
23-标签联合 23-标签联合
这里开发一个类似于std::variant的类模板Variant,Variant提供了比union更好的类型安全,其行为如下 #include "variant.hpp" #include <iostream> #include
22-Tuple 22-Tuple
基本Tuple设计存储(Storage) N>0个元素的tuple可存储为一个单元素(首元素)和一个包含N-1个元素的tuple(尾),零元素tuple作特殊情况处理。如Tuple<int, double, std::strin
21-Typelist 21-Typelist
Typelist解析 Typelist是类型元编程的核心数据结构,不同于大多数运行期数据结构,typelist不允许改变。比如添加一个元素到std::list会改变其本身,而添加一个元素到typelist则是创建一个新的typelist 一
20-元编程 20-元编程
值元编程(Value Metaprogramming) 常量表达式最初只能用 enum 来声明 template<int N> struct Fac { enum { value = N * Fac<N - 1>::val
19-桥接静态多态与动态多态 19-桥接静态多态与动态多态
函数对象、指针与std::function 函数对象用于给模板提供一些可定制行为 #include <iostream> #include <vector> template<typename F> void forU
18-模板与继承 18-模板与继承
空基类优化(EBCO)布局原则 C++不允许类大小为0,比如数组元素为类时,若类大小为0则数组大小也是0,这会导致指针运算失效。虽然不能存在大小为0的类,但标准规定,空类为基类时,只要不与同一类型的另一个对象或子对象分配在同一地址,就不用分
17-基于类型属性的重载 17-基于类型属性的重载
基于模板实参属性重载函数模板是很自然的需求,比如 template<typename Number> void f(Number); // only for numbers template<typename Contain
16-Traits的实现 16-Traits的实现
01 一个实例:累加一个序列1.1 Fixed Traits#include <iostream> template <typename T> T accum(const T* beg, const T* end) { T
1 / 3