论坛首页
任务活动
问答
论坛专题
登录
注册
elecintop
+ 关注
粉丝
3
|
主题
176
|
回帖
1329
加好友
私信
帖子
主题
回复
评论
C++模板元编程(C++ template metaprogramming)
2018-12-17 16:34
万利电子
89
9811
策略(policy)一般是一个类模板,典型的策略是 STL 容器(如 std::vector,完整声明是template class vect ...
其实,C++ 标准定义了类似的 traits:std::iterator_trait(另一个经典例子是 std::numeric_limits) 。特 ...
我们想让 mysum() 对指针参数也能工作,毕竟迭代器就是模拟指针,但指针没有嵌套类型 value_type,可以定义 ...
7. 特性,策略,标签 利用迭代器,我们可以实现很多通用算法,迭代器在容器与算法之间搭建了一座桥梁。求 ...
这里可以看到基类的作用:提供统一的接口,让 operator- 和 operator* 可以写成统一的模板形式。 ...
alpha*(u – v)” 的类型推断过程如下图所示,其中有子类到基类的隐式类型转换: ...
简化后(向量长度固定为1000,元素类型为 double)的向量计算代码如下:
我们这里看下文献[4] Expression templates 实现的版本,它用到了编译期多态,编译期多态示意代码如下(关 ...
不过值得一提的是,传统代码可以用 C++11 的右值引用提升性能,C++11 新特性我们以后再详细讨论。 ...
模板代码实现向量计算如下:
和表达式模板类似的技术还可以用到向量计算中,以避免产生临时向量变量,见文献[4] Expression templates ...
上面代码函数实现写在类的内部,即内联,如果编译器对内联支持的好的话,上面代码几乎等价于如下代码: ...
......
在 main() 中调用 evaluate() 时,编译器根据全局重载的加号、sqrt、除号、负号推断“-x / sqrt( 1.0 + x ) ...
代码有点长(我已经尽量压缩行数),请先看最下面的 main() 函数,表达式模板允许我们以 “-x / sqrt( 1.0 ...
6. 表达式模板,向量运算 文献[12]展示了一个表达式模板(Expression Templates)的例子: ...
程序中条件编译都未打开时(#if 0),main.obj 大小分别为 264 KB 和 211 KB,条件编译打开时(#if 1),ma ...
分散定义函数模板版本代码如下,为了更具可比性,也将函数放在类里面作为成员函数: ...
类模板封装版本代码如下,注意将成员函数在外面定义的写法:
为了清晰证明上面的论述,我们去掉所有 inline 并将函数实现放到类外面(类里面实现的成员函数都是内联的, ...
前一页
7
8
9
10
11
12
13
后一页
2
3
近期访客