《C++模板4237.pptVIP

  • 3
  • 0
  • 约1.02万字
  • 约 40页
  • 2016-12-28 发布于北京
  • 举报
函数模板名字空间 如果在全局域中声明了与模板参数同名的对象函数或类型则该全局名将被隐藏在下面的例子中tmp 的类型不是double 是模板参数Type typedef double Type; template class Type Type min( Type a, Type b ) { // tmp 类型为模板参数 Type // 不是全局 typedef Type tmp = a b ? a : b; return tmp; } Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. 函数模板名字冲突 模板参数名在同一模板参数表中只能被使用一次,但是模板参数名可以在多个函数模板声明或定义之间被重复使用 // 错误: 模板参数名 Type 的非法重复使用 template class Type, class Type Type min( Type, Type ); ? // ok: 名字 Type 在不同模板之间重复使用 template class Type Type min( Type, Type ); template class Type Type max( Type, Type ); Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. 函数模板名字冲突 在函数模板定义中声明的对象或类型不能与模板参数同名 template class Type Type min( Type a, Type b ) { // 错误: 重新声明模板参数 Type typedef double Type; Type tmp = a b ? a : b; return tmp; } Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. 函数模板参数作为返回值 模板类型参数名可以被用做函数模板的返回值 // ok: T1 表示 min() 的返回类型 // T2 和 T3 表示参数类型 template class T1, class T2, class T3 T1 min( T2, T3 ); Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. 函数模板中的二义性 为了分析模板定义,编译器必须能够区分出是类型以及不是类型的表达式。对于编译器来说它并不总是能够区分出模板定义中的哪些表达式是类型。 template class Parm, class U Parm minus( Parm* array, U value ) { Parm::name * p; // Parm::name, name 是类型名还是Parm的成员? 这是一个 指针声明还是乘法乘法? } 编译器不知道name 是否为一个类型因为它只有在模板被实例化之后才能找到Parm 表示的类的定义。 为了让编译器能够分析模板定义,用户必须指示编译器哪些表达式是类型表达式。 告诉编译器一个表达式是类型表达式的机制是在表达式前加上关键字typename。 template class Parm, class U Parm minus( Parm* array, U value ) { typename Parm::name * p; // ok: 指针声明 } 关键字typename 也可以被用在模板参数表中以指示一个模板参数是一个类型。 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. 函数模板的类型匹配 函数模板中的模板形参可实例化为各种类型,但当实例化模板形参的各模板实参之间不完全一致时,就可能发生错误 templatetypename T??????? void min(T x, T y) {??return (xy)?x:y;??} void func

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档