在模板参数中将const unsigned int转换为unsigned int

时间:2011-04-18 00:53:14

标签: c++

使用以下代码:

#include <iostream>

template< class T, unsigned int NVectorDimension = 3 >
class Vector
{
};

template< unsigned int TDimension >
int RunTest( void )
{
  const unsigned int VectorDimension = 4;
  typedef Vector< int, VectorDimension >     VectorPixelType;
}

int main(int argc, char *argv[])
{

  return 0;
}

我明白了:

In function ‘int RunTest()’:
12:40: error: could not convert template argument ‘VectorDimension’ to ‘unsigned int’
error: invalid type in declaration before ‘;’ token

任何想法有什么问题?

大卫

2 个答案:

答案 0 :(得分:1)

gcc确实存在一个错误。它现在已经修复: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48657

答案 1 :(得分:0)

如评论中所述,这应该可以正常工作。否则,您是否可以轻松更改class Vector声明?可以尝试一下。

template< class T, const unsigned int NVectorDimension = 3 >
class Vector  //   ^^^^^  adding const here
{
};

如果这不起作用,那么可以尝试宏观工作作为最后的手段。

int RunTest( void )
{
#define VectorDimension 4
  typedef Vector< int, VectorDimension >     VectorPixelType;
   // ...
#undef VectorDimension
}