首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++ 模板有关问题

2014-02-22 
C++ 模板问题最近在写C++课程设计,自己实现一个My_STL但是遇到了一个问题,就是我在写模板类,模板函数的时

C++ 模板问题
最近在写C++课程设计,自己实现一个My_STL
但是遇到了一个问题,就是我在写模板类,模板函数的时候,在编译的时候编译器并不会报错,这要怎么弄呢
写着写着就错了也不知道,一定要在主函数里实例化才可以吗,或者将它们显式实例化?
[解决办法]

引用:
Quote: 引用:

Quote: 引用:

把模版的声明和定义放在.h中


我想问的是,在写模板的时候,我一定要将它实例化之后才可以用编译器检验它的语法错误吗?不然怎么写编译器都是检查不到的?


这是肯定的。而且这是语法就要求这样(虽然调试起来会比较头痛),因为有大量的特性依赖于这种行为,最典型的就如SFINAE。何况即使不是为了这些特性,很多模板的具体行为在实例化以前是不可能清楚的,所以干脆规定编译器在做实例化以前(或者说 只要不实例化)根本就不要检查,只检查声明的格式是否合语法,而不检查定义(或者说实现)。
举个例子,下面这个简单的模板

template < typename _Ty >
struct A
{
    typedef typename _Ty::MyType _HisType;
    _HisType value;
};

对于这个模板,如果要求编译器实例化之前就检查所有的部分会发生什么事?结果显然是没法编译(即不能算错,也不能算对。而编译器报错的前提是遇到了一个确定的错误)。因为在实例化之前你连_Ty是什么都不知道,当然更不知道里面会不会有MyType这个类型定义,直接报错与直接不报错都不妥。编译器对后面的分析全都没法继续了。

++
++
++

热点排行