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

  • 相关阅读:
    发现一个github上特别优秀的面试准备资料
    坠吼的大哥的博客
    [BJDCTF 2nd]假猪套天下第一
    [网鼎杯 2020 朱雀组]phpweb
    [GWCTF 2019]我有一个数据库
    [BJDCTF2020]ZJCTF,不过如此
    [GXYCTF2019]禁止套娃
    洛谷
    [ZJCTF 2019]NiZhuanSiWei
    蓝帽杯决赛-爆炒腰花-WP
  • 原文地址:https://www.cnblogs.com/foundwant/p/2965436.html
Copyright © 2011-2022 走看看