- 论坛徽章:
- 2
|
回复 33# zylthinking
>> 为此, 所有容器都内嵌 iterator 类型, iterator 还分单项, 双向, 随机访问类型, 容器内部还有什么 type, ref_type, const_ref_type 等等, 基本上是为通用算法准备的, 由此导致的一个后果是, 如果你想自己写一个容器还能和他的算法配合, 那个容器你有的费力气了
这个本质上也还是上面说的约定吧?
就像要增加一种文件类型, 就要提供 read/write/open/close/seek/tell/... 什么的, 其实也一大堆。
virtual function也一样, 也要实现一堆。
都不是轻松的事。
>> 因此, 实现两者的分离不是天生很自然就是的了, 而是里面有着太多的苦力, 和AD0818那一个 mfor.h一样, 表面上风光无限, 看看内部, 无语得很
这不一样啊。
宏是C语言一直都存在的东西, 但为什么就没被玩出template那样的花样? 就是因为宏不是图灵完备的嘛……
AD0818那个 mfor.h , 应该有一个可计算的上限。 其实根本不是在计算, 而是预先计算好了然后去匹配……
C++03的问题就是玩template的时候还有一些地方需要依赖宏……
比如产生一个参数列表……
专门有一个库, boost.pp, 就是为了解决这样一类的事情: 进行一些扩展, 产生类似下面的代码
typename P0, typename P1, typename P2, ... 不变的是typename 或者是 typename P, 后面的数字是展开次数。
或者P0 a0, P1 a1, ...
蛋疼得很…… 而且依然不是在计算, 而是预先有一个上限值。
于是C++11引入了一个异常强大的variadic template…… |
|