C++ 模板问题最近在写C++课程设计,自己实现一个My_STL但是遇到了一个问题,就是我在写模板类,模板函数的时候,在编译的时候编译器并不会报错,这要怎么弄呢写着写着就错了也不知道,一定要在主函数里实例化才可以吗,或者将它们显式实例化? [解决办法]
Quote: 引用:Quote: 引用:把模版的声明和定义放在.h中我想问的是,在写模板的时候,我一定要将它实例化之后才可以用编译器检验它的语法错误吗?不然怎么写编译器都是检查不到的?这是肯定的。而且这是语法就要求这样(虽然调试起来会比较头痛),因为有大量的特性依赖于这种行为,最典型的就如SFINAE。何况即使不是为了这些特性,很多模板的具体行为在实例化以前是不可能清楚的,所以干脆规定编译器在做实例化以前(或者说 只要不实例化)根本就不要检查,只检查声明的格式是否合语法,而不检查定义(或者说实现)。举个例子,下面这个简单的模板template < typename _Ty >struct A{ typedef typename _Ty::MyType _HisType; _HisType value;};对于这个模板,如果要求编译器实例化之前就检查所有的部分会发生什么事?结果显然是没法编译(即不能算错,也不能算对。而编译器报错的前提是遇到了一个确定的错误)。因为在实例化之前你连_Ty是什么都不知道,当然更不知道里面会不会有MyType这个类型定义,直接报错与直接不报错都不妥。编译器对后面的分析全都没法继续了。
Quote: 引用:把模版的声明和定义放在.h中我想问的是,在写模板的时候,我一定要将它实例化之后才可以用编译器检验它的语法错误吗?不然怎么写编译器都是检查不到的?
把模版的声明和定义放在.h中
template < typename _Ty >struct A{ typedef typename _Ty::MyType _HisType; _HisType value;};