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

问一个关于模板实例化的有关问题

2012-02-25 
问一个关于模板实例化的问题。#includeiostream#includetypeinfousingnamespacestdtemplate classTc

问一个关于模板实例化的问题。
#include   <iostream>
#include   <typeinfo>    
using   namespace   std;
template <class   T>
class   A
{
        typedef   T&   reference;
        typedef   T*   pointer;
};
template <class   T>
class   B
{
        typename   T::reference   type;
typename   T::pointer     ptype;
};            
int   main()
{
cout < <sizeof(A <int> ) < <sizeof(A <double> ) < <endl;//为什么都是1,

cout < <sizeof(B <int> ) < <sizeof(B <double> ) < <endl;//这句为什么编译不过去
//cout < <sizeof(B <A <int> > ) < <sizeof(B(A <int> )) < <endl;
return   0;
}


[解决办法]
问题1,空类大小至少为1,这是规定。具体可看effective C++、深度探索C++对象模型等书
问题2,int没提供int::reference,当然编译不过。
[解决办法]
cout < <sizeof(A <int> ) < <sizeof(A <double> ) < <endl;//为什么都是1,
==============================
空类尺寸为1
[解决办法]
cout < <sizeof(B <int> ) < <sizeof(B <double> ) < <endl;//这句为什么编译不过去
==================================
实例化,会double::reference类型,所以编译错的

热点排行