关于模板应用的一个小问题
小弟在学校过程中遇到一个问题,考虑许久无法确定,想请高手解答,谢谢。
有模板类如下:
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传递给模板参数
模板怎么实例化