zoukankan      html  css  js  c++  java
  • 模版参数编译时检查方法,利用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的话,仅仅是声明,不会分配内存,这就是他的优越之处。

  • 相关阅读:
    阶乘递归实现
    队列
    1+2+3+...+100用递归实现
    快速排序C语言实现
    js的onfocus,onblur事件
    CSP2021 游记 菜到离谱
    700题复习计划
    [传递闭包] P2881 [USACO07MAR]排名的牛Ranking the Cows
    【笔记】序列分块
    【题解】UVA10930 A-Sequence
  • 原文地址:https://www.cnblogs.com/foundwant/p/2965436.html
Copyright © 2011-2022 走看看