C++箴言:理解typename的两个含义

C++箴言:理解typename的两个含义,第1张

C++箴言:理解typename的两个含义,第2张

问题:以下模板声明中class和typename有什么区别?

模板类小部件;//使用“class”
模板类小部件;//使用“typename”

回答:没区别。声明模板类型参数时,class和typename的含义完全相同。有些程序员更喜欢一直用class,因为它更容易输入。其他人(包括我自己)更喜欢typename,因为它意味着这个参数不必是类类型。一些开发人员在允许任何类型时使用typename,而class则是为只接受用户定义类型的情况保留的。但是从C++的角度来看,在声明模板参数时,class和typename的意思完全相同。
然而,C++并不总是将class和typename视为等价的东西。有时你必须使用typename。为了理解这一点,我们必须讨论您将在模板中涉及的两个名称。

假设我们有一个函数的模板,它可以得到一个STL兼容容器(STL compatible container)中保存的对象,这个容器可以赋值给int。进一步假设这个函数只是打印第二个元素的值。这是一个以混乱的方式实现的混乱函数,就像我下面写的,它甚至不能编译,但请提前把这些放在一边——有一种方法可以发现我的愚蠢:

template//print in
void print 2nd(const C & container)//container中的第2个元素;
{
//这不是有效的C++!
if(container . size()> = 2){
C::const _ iterator ITER(container . begin());//获取第一个元素的迭代器
++ ITER;//将iter移动到第2个元素
int value = * ITER;//将该元素复制到int
STD::cout = 2){
C::const _ iterator ITER(container . begin());//此名称假定为
...//不是类型

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C++箴言:理解typename的两个含义

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情