zoukankan      html  css  js  c++  java
  • C++11 局部和匿名类型作模板实参

    【1】C++11支持局部的类型和匿名类型做模板的实参

    在C++98中,标准对模板实参的类型还有一些限制。

    具体地讲,局部的类型和匿名的类型在C++98中都不能做模板类的实参。

    而在C++11标准中,支持做模板的实参。示例如下:

     1 template<typename T> class X {};
     2 template<typename T> void TempFun(T t) {};
     3 
     4 struct A { } a;
     5 struct { int i; } b;              // b是匿名类型变量
     6 typedef struct { int i; } B;      // B是匿名类型
     7 
     8 void fun()
     9 {
    10     struct C {} c;      // C是局部类型
    11 
    12     X<A> x1;            // C++98通过 C++11通过
    13     X<B> x2;            // C++98错误 C++11通过
    14     X<C> x3;            // C++98错误 C++11通过
    15 
    16     TempFun(a);         // C++98通过 C++11通过
    17     TempFun(b);         // C++98错误 C++11通过
    18     TempFun(c);         // C++98错误 C++11通过
    19 }

    但是,需要注意的是,虽然匿名类型可以被模板参数接受,如下写法是不可以的:

    1 template <typename T> 
    2 struct MyTemplate {};
    3 
    4 int main() 
    5 {
    6     MyTemplate<struct { int a; } > t;  // 无法编译通过,匿名类型的声明不能在模板实参位置
    7     return 0;
    8 }

    good good study, day day up.

    顺序 选择 循环 总结

  • 相关阅读:
    BZOJ2142: 礼物
    GYM100633J. Ceizenpok’s formula 扩展lucas模板
    Codeforces451E Devu and Flowers
    BZOJ2982: combination Lucas模板
    UVAL3700
    BZOJ2821: 作诗(Poetize)
    BZOJ2724: [Violet 6]蒲公英
    Luogu P1858 多人背包
    Luogu P2831 愤怒的小鸟(状压+记忆化搜索)
    Luogu P4205 [NOI2005]智慧珠游戏
  • 原文地址:https://www.cnblogs.com/Braveliu/p/12231805.html
Copyright © 2011-2022 走看看