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

关于模板应用的一个小疑点

2012-02-26 
关于模板应用的一个小问题小弟在学校过程中遇到一个问题,考虑许久无法确定,想请高手解答,谢谢。有模板类如

关于模板应用的一个小问题
小弟在学校过程中遇到一个问题,考虑许久无法确定,想请高手解答,谢谢。

有模板类如下:
template <typename T,int WIDTH, int HEIGHT>
class Grid
{
  //略
  protected:
  T mCells[WIDTH][HEIGHT];
};

我已经知道
Grid<int,10,10> myGrid;
这样实例化可以通过编译

使用
int height = 10;
Grid<int,10,height> myGrid;
这种情况编译通不过,将height改为常量,即const int height = 10,这样就可以通过了

不过小弟不知道,下面的情况能否通过编译
模板类如下:
template <typename T,int WIDTH = 10,int HEIGHT = 10>
class Grid
{
  //略
  protected:
  T mCells[WIDTH][HEIGHT];
};
使用Grid<int> myGrid;这种实例化方式可以通过编译吗,
课本上就是这种形式写的,不过我感觉有些问题,默认的参数毕竟不是const,不知道这样用可以吗,
如果可以,为什么?

[解决办法]
template <typename T,int WIDTH = 10,int HEIGHT = 10 > 
class Grid 

//略 
protected: 
T mCells[WIDTH][HEIGHT]; 
}; 
使用Grid <int > myGrid;这种实例化方式可以通过编译

----------------

可以通过的。等于是使用默认值进行初始化。
[解决办法]
不可以,non-type template parameter不可以有default value.
[解决办法]
<>的模板参数是类型. 貌似没有变量类型吧. 所以你必须明确的给定一个值, 而不是一个可变的. 也就是常量可以, 而变量不可以的原因吧!
[解决办法]
当然不可以了

你需要填写那两个常量

出去你加上默认值,方可
[解决办法]
模板是要实例化的
int height = 10; 
Grid <int,10,height > myGrid;
你用变量height传递给模板参数
模板怎么实例化

热点排行