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

怎么制作一个网站首页深圳网络营销外包好吗

怎么制作一个网站首页,深圳网络营销外包好吗,网站域名如何使用方法,网络推广工作描述这个系列主要记录C模板元编程的常用语法 文章目录 引言语法应用函数模板可变参数的打印可变参数的最小/最大函数 类模板 参考文献 引言 在C11之前,函数模板和类模板只支持含有固定数量的模板参数。C11增强了模板功能,允许模板定义中包含任意个(包括0个)…

这个系列主要记录C++模板元编程的常用语法


文章目录

  • 引言
  • 语法
  • 应用
    • 函数模板
      • 可变参数的打印
      • 可变参数的最小/最大函数
    • 类模板
  • 参考文献


引言

在C++11之前,函数模板和类模板只支持含有固定数量的模板参数。C++11增强了模板功能,允许模板定义中包含任意个(包括0个)模板参数,即可变参数模板。


语法

template<typename... Types>

其中 ... 可接纳的模板参数>=0
如果不希望产生模板参数个数为0的变长参数模板,则可以采用以下定义:

template<typename Head, typename... Tail>

由于多了Head类型,该模板必须有一个及以上的模板参数。


应用

函数模板

可变参数的打印

函数模板中一种常见的使用可变参数模板的场景是以递归的方式取出可用参数:

#include <iostream>void print() {}template<typename T, typename... Types>
void print(const T& firstArg, const Types&... args) {std::cout << firstArg << " " << sizeof...(args) << std::endl;print(args...);
}template <typename... Types>
void print(const Types&... args) {std::cout << "print(...)" << std::endl;
}int main(int argc, char* argv[]) {print(3.0f, "hello world", 10);return 0;
}

上面例子表示我们想要输出一个单精度浮点值+字符串+整型值:

  • 上面的 void print() {} 代表模板递归的终止。
  • print(args...) 展开参数,向下模板递归。
  • sizeof...(args) 得到参数的个数。

最终输出为

考虑如下情况,如果除了有上面的模板,我们还定义了一个完全泛化的模板:

template <typename... Types>
void print(const Types&... args) {std::cout << "print(...)" << std::endl;
}

那么输出结果是怎么样的?
答案是还是输出上面的值,这是因为编译器对于偏泛化和偏特化都满足的情况,会选择偏特化的模板。


可变参数的最小/最大函数

有时我们想得到可变参数的最小/最大函数,可以如下实现:

#include <iostream>template <typename T>
T m_min(T value) {return value;
}template <typename T, typename... Types>
T m_min(T value, Types... args) {return std::min(value, m_min(args...));
}int main(int argc, char *argv[]) {std::cout << my_min(4, 3, 1, 2) << std::endl;return 0;
}

类模板

可变参数模板也可以用于类模板中,比如STL中的tuple

#include <iostream>template<typename... Values> class tuple;
template<> class tuple<> {};template<typename Head, typename... Tail>
class tuple<Head, Tail...>: private tuple<Tail...>
{typedef tuple<Tail...> inherited;
public:tuple() {}tuple(Head v, Tail... vtail) : m_head(v), inherited(vtail...) {}Head& head() { return m_head; }inherited& tail() { return *this; }
protected:Head m_head;
};int main(int argc, char* argv[]) {tuple<float, std::string, int> t(3.0f, "hello world", 10);std::cout << t.head() << " " << t.tail().head() << " " << t.tail().tail().head() << std::endl;return 0;
}

通过可变参数模板,实现递归继承,根基类为 template<> class<>{},父类成员在内存中位于子类成员之前。

这里的输出为


参考文献

【C++】C++11可变参数模板(函数模板、类模板)

http://www.yayakq.cn/news/480187/

相关文章:

  • wordpress删除管理站点链接微信小程序可做购物网站吗
  • 建设银行代发工资清单网站wordpress标题相关
  • 网站做rss wordpress网站的虚拟人怎么做的
  • 河南省重点项目建设网站免费加速器试用一小时
  • 网站开发的过程织梦大气婚纱影楼网站源码 dedecms摄影工作室网站模板
  • 网站建设自主开发的三种方式商城网站开发 价格
  • 建设网站视频教程陇南比亚网站建设
  • 网站建设无形资产的账务处理o2o手机网站建设难
  • 广东建设协会网站珠海网站建设 旭洁科技
  • 网站内页做排名官方网站建设与维护好处
  • 网站蜘蛛记录中英文外贸网站建设
  • 说明设计网站开发方案流程免费餐饮管理系统
  • 常用的广州网站建设牌具做网站
  • 门户网站开发公司成都网络运营推广
  • 网站套用模板网站结构有哪几种
  • 北京网站建设团队网页设计包括哪些
  • 网站关键词设置代码彩票网站平台
  • 网站建设支付陕西专业网站建设
  • 男装网站的网站建设背景wordpress 动态标签云
  • 学生网站设计网站 栏目 英语
  • 珠海工商年检到哪个网站做手机网站是怎么制作的
  • 徐州网站简介网站建设如何设计数据库
  • 福安市教育局建设网站seo公司推荐推广平台
  • 新1站网站建设静态网站数据库
  • 如何制作局域网站网站页面相似度查询工具
  • 建设企业网站就等于开展网络营销请公司做网站没有做好可以退钱吗
  • 怎么提升网站的流量许嵩做的网站
  • 以个人名义可以做网站吗cms管理手机网站模板
  • 网站风格优势wordpress xiu5.3
  • 做网站的app有什么作用40平米办公室设计布局