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

只有一个页面的网站残联网站建设方案

只有一个页面的网站,残联网站建设方案,做竞猜网站合法吗,天河企业网站建设什么是嵌套依赖类型?嵌套依赖类型(Nested Dependent Type)是指在一个模板中,一个类型名称依赖于模板参数,并且是该模板参数内部的嵌套类型。具体来说,当一个类型满足以下两个条件时,它就是嵌套依…

什么是嵌套依赖类型?

嵌套依赖类型(Nested Dependent Type)是指在一个模板中,一个类型名称依赖于模板参数,并且是该模板参数内部的嵌套类型。

具体来说,当一个类型满足以下两个条件时,它就是嵌套依赖类型:

  1. 它嵌套在另一个类型内部(如 Container::iterator

  2. 外层类型依赖于模板参数(如 T::inner_typeContainer<T>::iterator

比如:

template <class T>
void print_list(const list<T>& l)
{typename list<T>::const_iterator it = l.begin();    // 这里 list<T> 依赖于模板参数 Twhile (it != l.end()){cout << *it << " ";++it;}cout << endl;
}

list<T>::const_iterator 就是一个嵌套依赖类型,因为:

  • const_iterator 嵌套在 list<T> 内部

  • list<T> 依赖于模板参数 T

为什么需要 typename 关键字?

C++ 编译器在解析模板时,需要知道一个依赖名称是类型还是值。由于模板可能被特化,编译器在实例化之前无法确定依赖名称的性质。

使用 typename 关键字可以明确告诉编译器:"这个依赖名称是一个类型"。

其他需要使用 typename 的情况

除了在函数内部声明嵌套依赖类型的变量外,还有以下几种情况需要使用 typename

        1. 作为函数返回类型

template <class T>
typename T::value_type get_first(const T& container) {return *container.begin();
}

        2. 作为函数参数类型

template <class T>
void process_element(typename T::element_type elem) {// 处理元素
}

        3. 在模板中声明成员变量类型

template <class Container>
class Wrapper {
public:typename Container::value_type first_element; // 使用 typename
};

        4. 使用用模板模板参数中的嵌套类型

template <template <class> class Container, class T>
void print_size(const Container<T>& c) {typename Container<T>::size_type s = c.size(); // 使用 typenamecout << s << endl;
}

        5. 在继承中指定基类类型

template <class T>
class Derived : public typename T::BaseType { // 使用 typename// ...
};

不需要使用 typename 的情况

以下情况不需要使用 typename

        1. 非依赖类型

template <class T>
void func() {std::string s; // 不需要 typename,因为 std::string 不依赖于 Tint i;         // 不需要 typename
}

        2. 基类列表和成员初始化列表

template <class T>
class Derived : public T::Nested { // 这里不需要 typename
public:Derived() : T::Nested() {} // 这里也不需要 typename
};

代码示例

#include <iostream>
#include <vector>
#include <list>
using namespace std;// 1. 函数返回类型中使用 typename
template <class Container>
typename Container::value_type get_first(const Container& c) {return *c.begin();
}// 2. 函数参数中使用 typename
template <class Container>
void print_element(typename Container::value_type elem) {cout << elem << " ";
}// 3. 类模板中使用 typename
template <class Container>
class ContainerInfo {
public:typedef typename Container::value_type value_type; // 使用 typenametypedef typename Container::iterator iterator;     // 使用 typenamestatic void print_info() {cout << "Container value_type: " << typeid(value_type).name() << endl;}
};int main() {vector<int> vec = {1, 2, 3};list<double> lst = {1.1, 2.2, 3.3};// 测试函数返回类型中的 typenamecout << "First element of vector: " << get_first(vec) << endl;cout << "First element of list: " << get_first(lst) << endl;// 测试类模板中的 typenameContainerInfo<vector<int>>::print_info();ContainerInfo<list<double>>::print_info();return 0;
}

总结

  • 嵌套依赖类型是指依赖于模板参数的嵌套类型

  • 使用 typename 关键字告诉编译器某个依赖名称是类型而不是值

  • 在函数返回类型、参数类型、变量声明等地方都可能需要使用 typename

  • 只有在处理依赖类型时才需要使用 typename,非依赖类型不需要

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

相关文章:

  • 站长工具app下载智联招聘网站怎么做微招聘
  • 网站建设宣传的目的此网站不支持下载视频怎么办
  • 网站建设类毕业设计wordpress页面和自定义链接地址
  • 徐州网站建设培训泰州网站设计哪家好
  • 网站后台更新图片做网站推广弊端
  • 门户网站的基本功能wordpress直播插件
  • 深圳 高端网站建设宝安长春电商网站建设哪家好
  • 用php做的网站有会员中心网站模板
  • 淘宝内部优惠券网站怎么做租房合同 模板
  • 甘肃省通信管理局 网站备案网页设计版面划分
  • 惠州高端模板建站网站设计公司深圳
  • 装修公司网站模板下载重庆企业建站程序
  • 花店网站建设方案中山网络推广
  • 郑州网站建设 易云互联烟台网站制作效果
  • 上海的加盟网站建设wordpress英文站源码
  • 北京网站建设排名做一个网站前端页面多少钱
  • 东莞网站推广排名可视化开发
  • 如何在路由器上做网站转跳我的微信公众号
  • 网站建设与管理规划书wordpress默认主体设置
  • 有关网站开发的文献或论文做视频网站都需要什么
  • 网站多域名怎么做自适应 wordpress
  • 企业信息化建设网站重庆绝美的十大冷门景点
  • 做优化送网站html5网页设计作业代码
  • wordpress ifanr主题怀化优化营商环境
  • 网站数据维护网络科技公司logo
  • 网站如何做rss订阅app展示网站
  • 汕头市通信建设管理办公室网站常州网
  • 个人站长网站需要注册公司吗苏州市住房和城乡建设局网站首页
  • 北京手机网站建设外包wordpress 电子书模板
  • 吉安市建设局图审中心网站龙华响应式网站建设