使用typename关键字解除疑惑 (hangwire发表于2002-8-28 17:14:28)[问题]:
C 中关键字typename有什么作用?什么时候要用它来代替<class T>?它们两者之间有什么区别?
[解答]:
简单地说,当typename和class用在模板定义开始部分时,它们的意义相同,但有时typename是用来告诉编译器模板中有一个表示类型名。比如,假设你有一个下面这样的模板:
template<class T> class foo {
void bar() {
T::Bletch * p;
……
}
}
那么这段代码中的T::Bletch * p是什么意思呢?是乘法表达式,还是一个指针定义?T::Bletch是个成员还是个类型?实际上,如果你使用类型名,就能解决这种困惑。
template <class T> class foo {
void bar() {
typename T::Bletch * p;
……
}
}
现在编译器知道T::Bletch是一个类型,而不是成员名。在模板定义里,你也能用<typename T>代替<class T>。也就是说下面的语句时相同的:
template<class X>...
template<typename X>...
|