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的话,仅仅是声明,不会分配内存,这就是他的优越之处。

  • 相关阅读:
    P1121 环状最大两段子段和
    无题
    cdoj 1485 柱爷搞子串 sam treap
    自然数幂和
    Gym 100341C AVL Trees NTT
    线性筛分解质因子
    codeforces 366 Ant Man dp
    UVALive 6914 Maze Mayhem 轮廓线dp
    hdu 5790 Prefix 字典树 主席树
    莫比乌斯反演个人小结
  • 原文地址:https://www.cnblogs.com/foundwant/p/2965436.html
Copyright © 2011-2022 走看看