- 论坛徽章:
- 2
|
template 我承认c确实做不到相同效果, 但一个问题是, template 真的起到了什么作用吗?
STL, 或者 boost, 将容器和算法脱离, 算是一大成果了; 但其实这些容器及算法也是可有可无的, 你不能以方面来否认他们的可替代性。 最后, 所谓容器算法分离, 最终起到的效果也就是让人少些几行代码。
zylthinking 发表于 2011-11-30 01:59 ![]()
我需要一个类似 vector 的东西, 实现一个。 (这里我就不说类型了, C里面容器要类型无关也不算太麻烦, 就是转型写起来很烦……)
需要排序, 实现一个; 需要稳定排序, 实现一个; 需要部分排序, 实现一个; 需要求交、并, 实现一个……
然后, 又需要类似 list 的东西, 实现一个; 需要各种排序、 各种操作, 分别实现……
然后, 可能有需要类似 deque 的东西, 实现, 实现, 实现……
可替代性还是我上面说的, 解决问题本身与寻求解决问题的方法。
这肯定是可替代的。 但不是解决问题的一般方法。
排序就是排序, 容器就是容器, C++允许程序员分别实现 N+M , 而不需要实现 N*M 。
寻找解决问题的一般方法本身就是一种价值。 不需要真的遇见各种可能性了才体现出其价值。
exception 就算了, 我始终不明白 exception 比返回值好到哪里去, 连一个 list.push_back都要 try catch 才算万无一失的东西, 用起来真是麻烦透顶。
zylthinking 发表于 2011-11-30 01:59 ![]()
返回值的问题是,即使你没法处理这个错误,也得写一段代码去检查,然后再将这个错误代码继续往调用链的上层返回。
上层如果依然不能处理, 还是得继续检测, 继续往上返回, 直到最终被处理, 或者被忽略……
而使用exception机制,是当确实对某种exception感兴趣,能够处理它发生时的情况,才需要写try catch...
不会连一个 list.push_back 都去 try catch 的……
否则,如果不能处理,就让它自动地向上传播 —— 当然要保证代码异常安全 —— 自动地找到某个可以处理的地方, 或者最终被main里写的一个try catch all 抓住。 |
|