template<typename T>
class Point
{
public:
typedef T value_type;
...
};
Run Code Online (Sandbox Code Playgroud)
我在Ray Lischner的书"C++ in a Nutshell"中看过上面的代码,第176页.
问题:
value_type吗?value_type在哪里使用?例如:Point<int>::value_type?
Xeo*_*Xeo 18
拥有一个并没有什么坏处,但它主要只对容器(如std::vector)有意义,因为所有容器都提供了这个typedef和一个统一的接口来访问包含的值(begin/ end,front/ back),尽管这在C +中已经过时了. +11用auto和decltype.some_template<typename container::value_type> ...尽管如此,它仍然更清晰.
这反过来意味着它们可以在通用代码中互换使用(事情以这种方式完成的主要原因).如果你的Point班级知道包含的值是什么类型是有道理的,那么就有了typedef.正如我所说,它并没有伤害.但是,我觉得这个特定的例子并没有多大意义.
编写在容器上执行的函数是一种很好的做法.例如,如果我编写了一个swap接受容器(模板化)和两个交换索引的函数,那么我可以使用该value_type定义来定义临时变量.
template<typename T>
void swap(T &container, int i, int j) {
typename T::value_type temp = container[i];
container[i] = container[j];
container[i] = temp;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14762 次 |
| 最近记录: |