语言陷阱:模板的默认参数

前段时间放出了BREW上模拟java数组的代码,这几天将那个代码使用g++进行编译,结果发现出错了。除去未找到函数声明的错误,有一个关于模板的默认参数的错误。原来的代码类似下面:

       template < typename T, int alength = 0 >
class ARRAY 
	{
    public:
		typedef ARRAY< T, alength  > ARRAY_TYPE;
		T* buf;	
		int length;
    //....
    ARRAY( T* abuf, int alength ): buf( NULL )
			{
			if( alength == 0 )
				{
				buf = NULL;
				length = 0;
				return;
				}
			buf = abuf;
			length = alength;		
			}
    //....
    }
       

如果使用g++进行编译的话,在ARRAY( T* abuf, int alength ): buf( NULL )处会出现关于alength的错误。但使用vc或者ads的编译器则不会出现。解决的方法就是不要将模板中的默认参数用到函数中。给自己一个提醒,以后写模板的时候需要注意一下。
PS:谁如果知道如何在指定的文本中取消自动链接的话,麻烦请告诉我。
ADD:
作者已经更新了这个问题

2条评论

回复 Firm 取消回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据