当前位置: 首页 > news >正文

深圳市住房和城乡建设厅网站中国建设银行积分兑换网站

深圳市住房和城乡建设厅网站,中国建设银行积分兑换网站,微信导航网站有用吗,做网站的群目录 1.class 和 typename 可互换 1.1 template 和 template 在模板参数列表中完全一样,可以互换使用。 2.什么时候 class 和 typename 不一样? 2.1 嵌套依赖类型 时必须用typename 重点说明: 2.2 普通作用域(不能互换&…

目录

1.class 和 typename 可互换

1.1 template 和 template 在模板参数列表中完全一样,可以互换使用。

2.什么时候 class 和 typename 不一样?

2.1  嵌套依赖类型 时必须用typename

重点说明:

2.2 普通作用域(不能互换,不能加 typename)


在 C++ 模板编程中,classtypename 在某些情况下可以互换使用,而在某些情况下不能互换,甚至 typename 是必须的。下面是更详细的解释和示例:

1.classtypename 可互换

1.1 template<class T>template<typename T> 在模板参数列表中完全一样,可以互换使用。

template<class T>    // 合法
void Print1(T value) { cout << value << endl; }template<typename T> //  也是合法
void Print2(T value) { cout << value << endl; }int main()
{Print1(42);   // T = intPrint2(3.14); // T = double
}

2.什么时候 classtypename 不一样?

2.1  嵌套依赖类型必须用typename

虽然 template<class T>template<typename T> 一样,但 typename嵌套依赖类型必须用!

必须使用 typename 关键字,以告诉编译器这是一个类型,T模板参数,编译器在解析模板时 并不知道 T::value_type 是类型还是变量typename 关键字告诉编译器:T::value_type 一定是一个类型。例如:

template <typename T>
class Outer {
public:using NestedType = typename T::Type;  // 必须加 typename
};

 如果 T::Type 依赖于模板参数 T,那么编译器在第一遍解析时无法确定 T::Type 是一个类型还是一个变量。因此,需要显式使用 typename 关键字。

下面是一个完整的代码示例以及代码分析:

template <typename T>
struct Wrapper {using Type = typename T::value_type; // typename 不能省略
};struct MyType {using value_type = int;
};int main() {Wrapper<MyType>::Type a = 10; // 正确return 0;
}

重点说明:

第一步:理解 MyType:MyType 是一个结构体(struct),using value_type = int;value_type 成为 int 的别名,这意味着 MyType::value_type 等价于 int

第二步:理解 Wrapper<T>,

  • 这里 Wrapper模板类T 是一个 模板参数
  • using Type = typename T::value_type;
    • T::value_type 依赖于模板参数 T
    • typename 不能省略,因为 T::value_type依赖类型(编译器在第一遍解析时不确定它是类型还是变量)。
    • Type 变成了 T::value_type 的别名。
    • 如果 T = MyType,那么展开后等价于:
struct Wrapper<MyType> {using Type = typename MyType::value_type; // 即 using Type = int;
};
//最终Wrapper<MyType>::Type == MyType::value_type == int

第三步main() 函数 :

  • Wrapper<MyType>::Type 等价于 int
  • a 的类型就是 int,所以 a = 10; 是合法的。
int main() {Wrapper<MyType>::Type a = 10; // 正确return 0;
}

2.2 普通作用域(不能互换,不能加 typename

非模板上下文(普通作用域)中,不允许使用 typename,也不允许用 class 代替 typename

struct MyType {using value_type = int;
};int main() {typename MyType::value_type a = 10; //  错误:非模板作用域不能使用 typenamereturn 0;
}

http://www.dtcms.com/a/563668.html

相关文章:

  • 网站集群建设解决方案网站开发连接数据库的方法
  • 网站建设徐州电商网站建设需要多少钱
  • 京东商城网站建设目标建筑机械人才培训网查询官网
  • 工行网站跟建设网站区别宁波百度快照优化排名
  • 长沙做网站哪里好网站制作的评价指标
  • 中山 网站建设一条龙服务游戏开发大亨高分攻略
  • 17网站一起做网店普如何推广一个新的app
  • 个人网站可以做电商么免费一站式网站建设
  • 外贸网站建站用什么意思2021近期时事新闻热点事件
  • 自动化网站建设东莞seo关键词
  • 重庆市建设公共资源交易中心网站首页网站做302跳转的意义
  • logo和网站主色调中华艺术宫室内设计
  • 一个商城网站开发要多少时间2023年中国进入一级战备状态了吗
  • 站长交流平台简单的网页设计代码记事本
  • 学做网站论坛教程下载为网站设计手机版
  • 网站建设方案服务公司pc网站建设怎么做
  • 东莞高端网站建设收费标准做兼职的网站策划书
  • 网站开发课程有哪些图书馆网站建设策划书
  • 急求一张 网站正在建设中的图片茶叶网站flash模板
  • 营销型网站建设的指导原则不包括谷歌外贸网站seo怎么做
  • 公司网站与营销网站区别河北省建筑培训网
  • 企业制作网站珠海网站建设托管
  • 吉林省城乡住房建设厅网站北京移动端网站设计
  • 微信端怎么建设网站黑客以网站做跳板入侵方法
  • 网站建设公司外包中企业网站建设
  • 网站主播天津通用网站建设方案
  • 怎么看网站什么时候做的龙口建网站公司价格
  • wordpress网站性能国家高新技术企业
  • 网站开发助手做网站学哪方面知识
  • 站长之家特效网站重庆网站模板制作