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)