模版参数编译时检查方法,利用typedef
很多情况下,你都需要使用模版参数,但又不知道用户输入的模版参数是否合法,是否在范围之内等,这个时候就可以利用typedef的特性来实现一种模版参数检查机制。
例如:
template <size_t sz=0> //模版参数sz默认为0 class templateClass { typedef int testArray[(sz<=100&&(sz & sz+1==0)) ? +1 : -1 ]; …… }
注明:typedef的这个int testArray显然没有实际意义,他的存在仅仅是为了检查这个模版参数 是否符合标准,就像上面的情况,它是否小于100,并且是否是2的幂,如果是,则程序就可以顺利编译通过,否则就会错误。所以这其实就是利用了编译器的编译时检查来限定参数。
其实之所以可以使用这种编译时检查机制, 根本在于模板参数是作为常量存在的,所以他可以用在需要常量的场合,此例,完全可以如下:
int testArray[(sz<=100 &&( (sz &sz +1)==0)) ? +1 : -1];
或者其他的方法,但是使用typedef的话,仅仅是声明,不会分配内存,这就是他的优越之处。