我的模板类如下所示:
template<unsigned WIDTH, unsigned HEIGTH, typename T = int> class matrix { ... }
如此简单明了,模板参数决定了矩阵的大小。大小在逻辑上是恒定的,所以我实现它是恒定的。但是当我尝试编写一个接受 my 的函数时matrix
,我遇到了以下问题:
std::ostream& operator<<(std::ostream &os, const matrix &m){ ...}
这样写,编译器理所当然地反对缺少模板参数......但是
std::ostream& operator<<(std::ostream &os, const matrix<unsigned, unsigned> &m){ ...}
触发此错误:error: expected a constant of type 'unsigned int', got 'unsigned> int'
这也是正确的,因为matrix
需要常量,而不是类型。
如何处理?我确定我不是第一个遇到这个问题的人,解决传递常量参数化模板这个问题的最“规范”方法是什么?