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

在线流程图网站怎么做应用软件免费下载

在线流程图网站怎么做,应用软件免费下载,cdn wordpress 升级,公司制作网站费用从引入 template 关键字开始#xff0c;C里就出现了泛型编程#xff0c;而又泛型编程衍生出的模板元编程#xff08;template meta_programming#xff0c;简称“元编程”#xff09;则是众多编程范式中最复杂、最强大和最具有权威的一种。所谓“元编程”——metaprogramm…从引入 template 关键字开始C里就出现了泛型编程而又泛型编程衍生出的模板元编程template meta_programming简称“元编程”则是众多编程范式中最复杂、最强大和最具有权威的一种。所谓“元编程”——metaprogramming有着完全不同于普通程序的许多特点是一种全新的编程体验。下面将介绍模板元编程的一些基础概念它们是现代C和boost程序库组件的基础。 1. 概述 元编程meta-programming也被称为“超程序”“超编程”或“产生式编程”这样说法一定程度上反映了其本质——它是一种位于普通程序之上、超越普通程序的程序可以操纵、产生程序的程序。模板元编程本质上是泛型编程的一个子集从广义上来说所有使用template 的泛型代码都可以称作元程序——因为泛型编程代码并不是真正可编译执行的代码它们只是定义了代码的产生规则是用来生成代码的“模板”。然而模板元编程又不完全等同于泛型编程它是一种“函数式编程”是图灵完备的可以“计算”任何东西。 模板元编程的允许是在编译期它把编译器变成了元程序的解释器。 2. 语法元素 模板元编程产生的元程序是在编译期执行的程序操作对象也不是普通的变量因此不能使用运行时的C 关键字if、else、for可以的语法元素相当有限最常用的包括 enum、static 用来定义编译期的变量typedef、using最重要的元编程关键字用于定义元数据template模板元编程的“起点”主要用于定义元函数“::”域运算符用于解析类型作用域获取计算结果元数据 3. 元数据 元编程可操作的数据就称为“元数据”meta date也就是C 编译器在编译期可操作的数据它是模板元编程的基础。元数据都是不可变的不能够就地修改最常见的元数据是整数和C 类型type。这些元数据不是运行时的普通变量而是如 int、double、class非模板类这样的抽象数据类型。要是对元数据再细分归类则它又可分为 整数元数据值型元数据int、double等POD值类型函数元数据函数类型类元数据class、struct等用户自定义类型 对于下面所提到的‘元数据“特征非整数类型的元数据。 使用tyoedef 关键字可以任意定义声明元数据很像运行时的变量定义如 typedef int mtes_data1; //元数据meta_data1, 值为 int typedef std::vectorfloat meta_data2; //元数据meta_data2,值为vectorfloat使用using 也可以达到同样的效果 using meta_data1 int; using meta_data2 std:;vectorfloat;4. 元函数 元函数meta function是模板元编程中用于操作处理元数据的”构件“可以在编译期被”调用“因为其功能和形式类似运行时的函数而得名是元编程里的核心概念。它实际上是一个类或者模板类通常形式为 templatetypename arg1, typename arg2, ... //元函数参数列表 struct meta_function //元函数名 {typedef sone-define type; //元函数返回元数据//using type some-define; static int const val some-int; //元函数返回的整数 };//结束编写元函数就像是编写一个普通的运行是函数但形式上却是一个模板类 函数参数列表的园括号”“ 变成了模板列表的尖括号”“函数的形参变成了模板参数即元数据并且要使用关键字 typedef 修饰因为不能使用运行时关键字所以元函数不能像其他普通函数那样使用return 返回计算结果而是需要在内部使用typedef / using 定义一个名为 type 的类型元数据或者名为val 的值作为返回最后以分号结束因为它本质上是一个类 元函数也可以没有返回值即不定义内部类型type也可以有重载模板特例/偏特化也可以有缺省参数也可以分为无参、单参、多参、可变参等类别。但元函数没有普通函数参数传值、传引用的区别也没有函数指针的概念。如果有必要元函数可以使用 typedef / using 关键字 “返回” 任意多个返回值并且这些没有顺序关系能够用 ”::“ 来任意获取。为表述方便下面将只返回 ::type 的元函数称为标准元函数而返回多个元数据的元函数称为非标准元函数。 下面给一段值元函数的代码 templateint N, int M //两个元数据 struct meta_func {static const int val N M; //编译期计算整数之和 };cout meta_func10, 10::val endl; //计算结果 20这里需要主要的是meta_func 的执行过程它的计算在编译期的时候就已经完成了即模板实例化meta_func::val 实际上是一个编译期常量程序运行时不会有任何计算动作而是直接使用结果。如果这是一个大型的元函数那么在编译期节约的计算量就会相当可观可以显著提高程序运行的效率。 由于元函数的计算发生在编译期所以下列代码不能成立不能使用运行时的变量 下面示范了另一个元函数它返回元函数参数列表中的第一个元数据 templatetypename T1, typename T2 //两个形参 struct select1st {typedef T1 type; //返回T1等价于using type T1 };5. 元函数转发 元函数转发是模板元编程中一个经常用到的惯用法相当于运行时的函数转发调用但在模板元编程中则要用 public 继承实现模板参数传递给父类完成元函数的 ”调用“这样的子类会自动获得父类的::type 定义同时也完成了元函数的返回。例如下面代码把元函数数据调换位置后转发给之前定义的元函数 select1st 相当于select2nd 的功能 templatetypename T1, typename T2 struct forword: select1st: //元函数转发默认是public继承select1stT2, T1 //参数位置变动 {};templatetypename T1, typename T2 struct forward //不用转发 {typedef typename select1stT2, T1::type type; //调用元函数计算 };易知元函数转发因为使用了类继承所以更加简洁 6. 工具宏 模板元编程是一种全新的C 编程范式但仍然使用原有的语法通篇的 typedef / using 、 template 关键字使元程序不易理解所有完美可以定义一些工具宏均以“mp_”开头或者用增加习惯的方法定义这样能够便于我们理解。 #define mp_arglist template //元函数参数列表 #define mp_arg typename //元函数参数声明 #define mp_function struct //元函数定义 #define mp_data typedef //元数据定义#define mp_return(T) mp_data T type //元函数返回 //using type T #define mp_exec(Func) Func::type //获取元函数返回结果 #define eval(Func) Func::value //获取元函数返回值这些分别把 template 、typename、struct 和 typedef 这四个模板元编程中最常用的关键字进行了重命名。 mp_arglist 表示元函数的参数列表开始mp_arg 表示元函数的参数mp_function 表示定义一个元函数mp_data 表示定义一个元数据mp_return / mp_eval / mp_exec 定义了元编程中约定返回值用法较原写法更清楚 mp_data int meta_data1; //元数据meta_data1值为intmp_arglistmp_arg T1, mp_arg T2 //元函数的参数是T1、T2 mp_function select1st //元函数select1st {mp_return(T1); //返回T1 - type }很明显使用工具宏使元程序看起来更加清楚易于区分。但是由于宏预处理机制自身的“缺陷”后三个工具宏的作用有限它们只能处理简单的参数如果带有 “”那么模板类就会失效但Boost 库里面的 BOOST_IDENTITY_TYPE 来解决。 7. 应用示例 下面通过两个例子来示范元编程的基本使用 编译期比较大小 mp_arglistint L, int R mp_function static_min //元函数 static_min {static const int value (L R) ? L : R; };assert((static_min10, 20::value 10)); //编译期比较demo_func 输入元数据 T 是指针类型返回const T否则 const T* mp_arglistmp_arg T //单参元函数 mp_function demo_func {mp_return(const T*); //通常情况返回const T* };mp_arglistmp_arg T mp_function demo_funcT* //对T*情况进行模板实例化 {mp_return(const T); };//这里用is_same元函数进行验证 #includeboost/type_traits/is_same assert((is_samemp_exec(demo_funcint), const int*::value)); assert((is_samemp_exec(demo_funcint*), const int::value)); //这里的 assert 必须用两对括号来包围断言8. 总结 我们介绍了模板元编程的基础知识包括元编程 / 元程序 / 元数据 和 元函数转发等概念。 元编程是一种超越普通程序的程序在C中元编程是使用模板技术实现的所以它右被称为模板元编程。元程序可以由C编译期解释执行把部分计算量由运行时转移到编译时完成提高程序运行效率但元编程更大的用途是类型推导操作C类型体系。元数据是元编程的操作对象可以是整数含bool或任意的C类型元函数是元编程的核心它表现为C的一个模板类我们必须使用元函数才能操作元数据。它以内部定义::type 或 ::value 返回计算结果并可以使用public 继承的方式实现元函数转发 至此结束
http://www.zqtcl.cn/news/901315/

相关文章:

  • 高大上企业网站优秀的门户网站
  • 做seo对网站推广有什么作用自己做电商网站吗
  • 网站从哪些方面来做泉州网页搜索排名提升
  • 网站建设可以给公司带来想做网站开发兼职
  • 天津市免费建站精美大气的餐饮类企业网站
  • 购物网站那个信用好又便宜手机模板的网站
  • 建筑企业资质查询网站怎么查网络服务商
  • 汉川市城乡建设局网站企业销售网站建设
  • 梅州建设网站域名购买流程
  • 单页网站与传统网站的区别wordpress对接微信
  • 做公司网站深圳旅游
  • 最好企业网站网站建设 的销售图片
  • 怎么创建网站 免费滴做网站算运营吗
  • 廊坊网站建设-商昊网络正规网站优化推广
  • 网站建设拍金手指排名贰贰安装wordpress数据库错误
  • 食品网站建设需求分析购物app大全
  • 电商美工广州seo技术外包公司
  • 重庆旅游seo整站优化深圳宝安区是富人区吗
  • 网站开发验收模板网站欧美风格
  • 自己做发卡网站什么是网络设计制作
  • 如何搭建一个公司网站互联网推广怎么找客户
  • 江苏同隆建设集团有限公司网站asp.net新建网站
  • 爱站网挖掘工具小程序网站开发怎么样
  • 网站文章批量上传工具自己制作免费网站
  • 凡科快速建站建设网站遇到问题的解决方案
  • 深圳市公司网站建设公司十大互联网营销公司
  • 免费发布推广信息的网站百度招聘2022年最新招聘
  • 建站公司怎么获客任县附近网站建设价格
  • 泰兴市淘宝网站建设指数 网站权重
  • 烟台市做网站找哪家好才艺多网站建设