美文网首页
深入理解C++11 2.13 局部和匿名类型做模板实参

深入理解C++11 2.13 局部和匿名类型做模板实参

作者: zinclee123 | 来源:发表于2019-08-08 19:08 被阅读0次

C++98中,局部的类型和匿名的类型不能做模板类的实参,如

template<typename T> class X {};
template<typename T> void TempFun(T t) {};
struct A{} a;
struct {int i;}b;               //b是匿名类型变量
typedef struct {int i;}B;        //B是匿名类型

void fun(){
    struct C{} c;       //C是局部类型
    
    X<A> x1;            //C++98通过 C++11通过
    X<B> x2;            //C++98错误 C++11通过
    X<C> x3;            //C++98错误 C++11通过
    
    TempFun(a);         //C++98通过 C++11通过
    TempFun(b);         //C++98错误 C++11通过
    TempFun(c);         //C++98错误 C++11通过
}

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

template <typename T> struct MyTemplate {};

int main(){
    MyTemplate<struct {int a;}> t; //无法编译通过,匿名类型的声明不能在模板实参位置
    return 0;
}

相关文章

  • 深入理解C++11 2.13 局部和匿名类型做模板实参

    C++98中,局部的类型和匿名的类型不能做模板类的实参,如 需要注意的是,虽然匿名类型可以被模板参数接受,但是如下...

  • ★06.关于函数模板

    定义: 特化 代码 输出 默认模板实参【C++11】 显式指定模板实参 显式实例化 尾置返回类型的应用 转发型引用...

  • 【Effective Modern C++】索引

    本书讲述了C++11/14新特性的用法和原理。1. 类型推断01 理解模板类型推断02 理解auto类型推断03 ...

  • TMP(2)

    深入模板原理 函数模板,类模板的实参推导 函数模板的实参推导函数模板的实参推导是发生在名字查找之后,和重载决议之前...

  • JavaScript基础 函数传参

    实参:实际参数(所有的数据类型都可做实参)形参:形式参数(变量) 实参与形参一一对应; 例: 例题: 注意:局部变...

  • 《深入理解 C++11 :C++11 新特性解析与应用》国内首本

    深入理解 C++11 :C++11 新特性解析与应用 公众号回复“41532”获取下载地址 《深入理解C++11:...

  • C++11 模板元编程 - 模板的编译期计算

    和函数求值类似,当模板的形参被实参替换时,模板会进行编译期计算。由于模板的参数支持类型参数和非类型参数,所以模板在...

  • Effective Modern C++ - 1: 类型推断

    part1 类型推断 item1 模板类型推断: 即 函数模板实参推断 规则非常自然 remember: 模板类型...

  • 【C++ Templates(14)】模板实参推断

    推断的过程 对函数调用,推断会比较实参类型和模板参数类型(即T),对要被推断的参数分别推断出替换,每个实参-参数对...

  • 函数模板

    template //模板编译器根据实参类型推演模板参数的实际类型 例如:输入两个数a...

网友评论

      本文标题:深入理解C++11 2.13 局部和匿名类型做模板实参

      本文链接:https://www.haomeiwen.com/subject/hhsfjctx.html