E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
模板元编程
c++
模板元编程
七:类型判断的traits类
2用于判断类型的traits类is_void类可以判断模板参数的类型,使用很简单,注意,也可以直接使用::value。cout::type::value::type::valuestructis_void:publicfalse_type{};template:publictrue_type{};c++11标准支持的同理还有is_pointer,is_floating_point,is_array
csfreebird
·
2020-07-05 11:53
#
c++模板技术
C++
模板元编程
---折叠表达式
基础博客:https://blog.csdn.net/qq_35976351/article/details/106985750折叠表达式同样是运行在编译期间的,先给出基本的规则:注意,一元表达式只有&&、||或者,有缺省值,三者空包的默认值分别是:true、false和void()所有支持的运算符是:+-*/%^&|=>+=-=*=/=%=^=&=|=>===!==&&||,.*->*给出一元折
Erick_Lv
·
2020-07-05 05:10
C++笔记
C++
模板元编程
所谓的元编程就是编写直接生成或操纵程序的程序,C++模板为C++语言提供了元编程的能力。模板使C++编程变得异常灵活,能实现很多高级动态语言才有的特性(语法上可能比较丑陋,一些历史原因见下文)。普通用户对C++模板的使用可能不是很频繁,大致限于泛型编程,但一些系统级的代码,尤其是对通用性、性能要求极高的基础库(如STL、Boost)几乎不可避免的都大量地使用C++模板,一个稍有规模的大量使用模板的
PengStrongLee
·
2020-07-02 13:43
C/C++编程
C++
模板元编程
之使用模板,对数组进行“编译期间求和”
编译期间求值,将计算提前到编译期间进行,可以最大限度地榨干编译器的潜力,提高程序的运行速度,用AndreiAlexanderescu的话说就是“时间花在编译期,就某种意义来说这是‘免费的’”(《C++设计新思维》P55)。所以就有了对数组在编译期间求和的需求。先上代码,再解释:#includeusingnamespacestd;//一个全局的int数组,需要对其求和constintCONST_AR
lslxdx
·
2020-07-02 10:12
C++_原创区
c++
模板元编程
模板的模板参数
代码如下:/*
[email protected]
*///devc++#include#include//#include//#include//#includeusingnamespacestd;templateclassF>structaccumulate{enum{RET=accumulate::RET+F::RET};};templat
ccsdu2004
·
2020-07-01 19:32
c++
模板元编程
核动力机器人代码
C++ primer 第十六章.模板与泛型编程——定义模板(1)
对于有着相同形式的函数,如果仅仅只是参数类型不同,那么给每个不同参数表的函数都重新写一份拷贝是很麻烦的事情,
模板元编程
允许我们用泛型的方式去编写一个函数,而模板与运算符重载配合起来的威力更是惊人,使代码的复用性大大提高
NeverTheLevius
·
2020-07-01 12:42
Effective C++ 学习笔记2 模板与泛型编程
c++模板最初的发展动机:让我们得以建立"类型安全"的容器,如vector、list和map;泛型编程写出的代码和其所处理的对象类型彼此独立;
模板元编程
,创造出在C++编译器内执行并于编译完成时停止运行的程序
Linhom_281
·
2020-07-01 11:57
Effective
C++学习笔记
Effective C++读书笔记---模板与泛型编程
于是导出了
模板元编程
(templatemetaprogramming),创建出“在C++编译器内执行并于编译完成时停止执行”的程序四十一、条款41-了解隐式接口和编译器多态1.class和template
DotScylla
·
2020-07-01 09:38
C/C++
C++之:
模板元编程
(三) 默认模板参数
一、类模板的默认模板参数原则1、可以为类模板的类型形参提供默认值,但不能为函数模板的类型形参提供默认值。函数模板和类模板都可以为模板的非类型形参提供默认值。2、类模板的类型形参默认值形式为:templateclassA{};为第二个模板类型形参T2提供int型的默认值。3、类模板类型形参默认值和函数的默认参数一样,如果有多个类型形参则从第一个形参设定了默认值之后的所有模板形参都要设定默认值,比如t
weixin_34008784
·
2020-07-01 05:57
C++11
模板元编程
- 柯理函数
现在,我们想实现一个元函数,可以返回char类型指定层数的指针类型。templatestructCharPointer{usingResult=typenameTimes::Result;};如上,我们定义了元函数CharPointer,它是一个int型单参元函数。它的实现调用了Times,将其第二和第三个参数分别固定为char和PointerOf。借助于继承的特性,上面的代码可以简化为:temp
MagicBowen
·
2020-06-28 00:59
《Effectirve C++》笔记(条款1~10)
条款1:视C++为一个语言联邦C是多种范式汇集的语言,包括C的过程、C面向对象、Template泛型(STL模板库)、
模板元编程
、lambda。
流媒体程序员
·
2020-06-24 16:35
C++
C++11
模板元编程
- Test in TLP
TLP库中“tlp/include/test”目录下是我们前面介绍过的面向C++
模板元编程
的测试框架。该框架使用时需要#include,然后就可以像前文所述那样去编写测试用例了。
MagicBowen
·
2020-06-24 01:29
C++11
模板元编程
- TypeList
在C++
模板元编程
中,一切操作对象已经统一到类型上,所以我们需要的是一个针对类型的list数据结构,这就是TLP库中的TypeList。
MagicBowen
·
2020-06-22 06:10
C++11
模板元编程
- 类型选择
上面我们在send的函数实现中创建了一个msg,它的内存是在函数栈空间上临时申请的。一般系统间发送的消息可能会比较大,我们知道为了避免栈溢出,函数内不宜直接定义内存占用过大的临时变量,所以我们设计了一个内存池,专门用于消息的内存分配和回收。auto*msg=PoolAllocator::alloc();build(*msg);//...PoolAllocator::free(msg);PoolAl
MagicBowen
·
2020-04-13 08:27
C++11
模板元编程
- 代码生成
假如我们已经有了一组继承体系:如果我们要在其中增加一个新的动物mouse,只用新建一个Mouse类,让它继承自公共父类Animal然后覆写run方法即可。得益于对开放封闭原则(OCP)的遵守,老鼠的出现不会惊动到猫狗:)但是假如我们想要为其增加一个voidcry()虚接口呢?这时我们就要打开每个类的文件,为其编写cry的具体实现。这时我们发现了“散弹式修改”的坏味道,一声cry让所有的动物都鸡飞狗
MagicBowen
·
2020-04-10 07:36
C++11
模板元编程
- 不可变性
从这个角度来说,C++
模板元编程
是一种纯函数式语言,遵循引用透明性。也就是说函数没有状态,具有不可变性。对一个函数任何时候输入相同的入参,它将永远返回相同的值。另外,这里也没有真正的变量。
MagicBowen
·
2020-04-06 19:08
C++11
模板元编程
- 模式匹配
C++
模板元编程
中,编译器对模板的特化版本选择相当于是在做模式匹配,这个我们已经比较熟悉了。
MagicBowen
·
2020-04-05 22:35
C++11
模板元编程
- 测试套件
映射到
模板元编程
,fixture应该是一个可以定义类型,定义元函数的独立作用域。首先想到也用类定义来实现fixture,这样内部的testcase就相当于fixture类的内嵌类。
MagicBowen
·
2020-04-04 09:54
C++11
模板元编程
- 元函数
我们继续演进前面那个无聊的类型计算的例子,来得出元函数的定义。前面我们实现了PointerOf,它对于传进的任意类型T可以计算出T的指针类型。templatestructPointerOf{usingResult=T*;};现在我们想要实现一个能够计算T的指针的指针类型的模板,怎么做?一种做法是直接定义一个新的模板:templatestructPointer2Of{usingResult=T**;
MagicBowen
·
2020-03-31 06:06
C++11
模板元编程
- 模板的模板参数
上例中由于Stack类模板的声明中第二个参数是一个类型(typenameContainer),所以我们通过Stack>定义一个具体的栈类型时,第二个参数传递std::deque,而不能是std::deque。上述定义中我们一共把int写了两遍,而这种重复是一种必然的重复。为了避免上述重复,我们可以让Stack的第二个参数直接是一个模板,而不再是一个具体类型。templateclassContain
MagicBowen
·
2020-03-29 21:18
C++
模板元编程
习题
2-0编写一个一元元函数add_const_ref,如果T是一个引用类型,就返回T,否则返回Tconst&。#includetemplatestructadd_const_reference;templatestructadd_const_ref{usingtype=typenameadd_const_reference::value,T>::type;};templatestructadd_co
Rabenda
·
2020-03-27 19:54
C++11
模板元编程
- 编译期纯函数式计算
我们一直强调把C++
模板元编程
当做一门图灵完备的纯函数式语言来学习,为了证明它这种能力,之前举的都是类似计算阶乘的简单例子,这里我们通过
模板元编程
的编译期计算能力完成一道相对复杂但是有趣的数学题目。
MagicBowen
·
2020-03-25 20:04
C++11
模板元编程
- 高阶函数
接着上面的例子,此刻我们想要定义指向指针的指针的指针的指针类型,怎么办?或者说我们想要一种能够任意指定指针层数的元函数。如果我们想复用手里已有的PointerOf元函数来完成,我们就需要有一个能够将PointerOf反复施展指定次数的元函数。下面我们实现了一个通用的Times元函数,它可以对一个指定类型T反复调用另一个元函数N次。templateclassFunc>structTimes{usin
MagicBowen
·
2020-03-23 05:34
C++11
模板元编程
- 鸭子类型
模板为C++提供了鸭子类型(Ducktyping)的特性。所谓鸭子类型,指的是代码关注的不是对象的类型本身,而是它被如何使用的。例如,在使用鸭子类型的语言中,我们编写一个函数可以接受一个任意类型的对象,只要它有走、游泳和嘎嘎叫方法。至于客户给它传入的是一只真正的鸭子,或是也能走、游泳和嘎嘎叫的其它类型对象,都没有关系。但是如果传入的对象中没有这些需要被调用的方法,就将引发一个错误。"WhenIse
MagicBowen
·
2020-03-18 00:29
C++11
模板元编程
- 模板的特化
前面定义的Stack中,第二个模板参数要求支持back,push_back,pop_back等接口。如果我们已经有一个自定义的容器Array,它的定义如下:template>structArray{voidput(size_tindex,constT&t);Tget(size_tindex);...};Array只有put和get接口,并辅助以index参数进行元素存取。为了让Array也能参与实
MagicBowen
·
2020-03-13 07:19
C++11
模板元编程
- 测试Setup
针对
模板元编程
进行测试时,所谓的前置动作一般是调用元函数,将结果保存在临时类型里,供fixture内所有测试用例使用。
MagicBowen
·
2020-03-12 18:14
C++11
模板元编程
- 测试Teardown
既然fixture内部可以定义setup,我们自然希望也能对称地定义teardown,用于处理同一个fixture中所有测试用例共同的善后工作。比如我们希望有如下的测试用例描述方式:FIXTURE(TestTearDown){TEARDOWN(){ASSERT_EQ(__int(0),expected);}TEST("test1"){usingexpected=__int(0);};TEST("t
MagicBowen
·
2020-03-02 03:07
C++11
模板元编程
- 测试报告
由于
模板元编程
基本没有任何IO能力,所以用例过滤和统计只能借助别的手段(对于用例统计汇报,倒是可以在元编程范畴内完成,但是用例统计结果靠编译告警打印出来格式太难看)。
MagicBowen
·
2020-02-28 04:56
C++11
模板元编程
- 模板的类型参数
下面是我们熟悉的类模板的例子:一个简单的容器栈,它可以支持不同的类型做元素。#include#includetemplatestructStack{voidpush(constT&elem){elems.push_back(elem);}Tpop(){if(empty())throwstd::out_of_range("Stackelems;};它的用法如下:StackintStack;intSt
MagicBowen
·
2020-02-21 18:34
C++11
模板元编程
- TLP测试框架
既然说可以把
模板元编程
当做一门独立的语言,那么针对这门语言,我们希望能有一个专门的xUnit测试框架。传统的C++测试框架,如gtest,cppUnit等,主要针对运行期C++设计。
MagicBowen
·
2020-02-21 06:09
C++11
模板元编程
- 一切都是函数
前面我们对整形和bool提供了模板包装,可以将一个具体的值变为一个类型。例如IntType和IntType就是两个不同的类型,而BoolType和TrueType则是相同的类型。从另一个角度来看IntType,它其实也是个元函数:接收一个int型常量,返回一个类型。BoolType也是一样的。为了简化对它们的使用,我们使用宏将其封装一下:#define__int(value)typenameInt
MagicBowen
·
2020-02-20 13:23
C++11
模板元编程
- 两阶段的C++语言
前面我们介绍了C++
模板元编程
的基础知识。我们将
模板元编程
的计算对象统一到类型上,引入了元函数的概念。
MagicBowen
·
2020-02-14 09:07
C++11
模板元编程
- 模板的数值计算
模板的数值计算发生在编译期,计算的参数由模板入参输入,计算的结果由模板内部定义的enum或者staticconst的整形成员保存。如下我们实现编译期的整数加法:templatestructPlus{enum{Value=X+Y};};可以如下面的方式使用类模板Plus:intmain(){std::cout::ValuestructPrint{operatorchar(){returnValue+
MagicBowen
·
2020-02-11 00:02
C++11
模板元编程
- 构建DSL
一个静态类型系统;近似于零抽象惩罚的能力(包括强大的优化器);预处理宏,能够以文本替换的方式操纵源代码;一套丰富的内建符号运算符,它们可以被重载,且对重载的语义几乎没有任何限制;一套图灵完备的模板计算系统(
模板元编程
MagicBowen
·
2020-02-10 05:31
SFINAE 与 type_traits
SFINAE与type_traitsSFINAE替换失败不是错误(SubstitutionFailureIsNotAnError),此特性被用于
模板元编程
。
小胖西瓜
·
2020-02-05 12:00
C++ Template (二):初步元编程
在本篇博文中会介绍Template为C++添加的平行宇宙
模板元编程
Templatemetapromming(后文简称TMP)。首先要说明TMP是图灵完备的,这也就是为什么说TM
iwtbam
·
2020-01-02 08:13
深入理解C++11 核心编程(一)
(C++模板使得C++近乎成为了一种函数式编程语言,而且使得C++程序员拥有了
模板元编程
的能力。)相比之下,C++11的整体设计目标如下:一、使得C++成为更好的适用于系统开发及库开发的语言。
我是小居居
·
2019-12-30 23:24
C++11
模板元编程
- 目录
前言模板的基础知识模板的类型参数模板的默认参数模板的模板参数模板的特化模板的非类型参数模板的编译期计算数值计算类型计算模板递归C++
模板元编程
元函数高阶函数柯理函数(currying)一切都是类型一切都是函数模式匹配递归不可变性惰性鸭子类型总结
MagicBowen
·
2019-12-29 19:08
C++11 标准库源代码剖析:连载之一
C++
模板元编程
元程序一词来源于英文单词metaprogram。在英语中,metaprogram的意思是aprogramaboutaprogram,翻译过来就是程序的程序。
JackZou
·
2019-12-23 16:23
C++11
模板元编程
- 类型校验
一般情况下一个系统可以发送和接收的消息是确定的。例如前面的例子中,visitor可以发送AccessReq消息,可以接收AccessRsp消息,然而客户在描述测试用例时却可以传递非法的lambda给visitor。例如:TEST(...){visitor.send([this](CfgReq&req){req.capability=CAPABILITY;});//...}此时,visitor将会构
MagicBowen
·
2019-12-21 09:52
C++11
模板元编程
- 类型萃取
类型萃取(trait)的概念我们前面有介绍过。可以将trait看做是一种静态反射技术,通过trait我们可以自动提取出想要的代码元信息,避免让客户代码显示去提供这些信息,从而使得客户代码更加的简洁。在dates中,客户可使用FakeSystem定义一个fake系统,与SUT交互。FakeSystem拥有send和recv接口,分别向SUT发送消息,以及从SUT接收消息。send的入参是一个原型为v
MagicBowen
·
2019-12-20 08:37
C++11
模板元编程
- 递归
模板元编程
中可以完成模式匹配的两种方式上节已经介绍。本节介绍
模板元编程
中的递归。前面在介绍编译期数值计算的整数阶乘的例子时,就已经展示了使用类模板进行递归计算的一般做法。
MagicBowen
·
2019-12-16 17:38
C++11
模板元编程
- 测试断言
测试最重要的是要有断言。C++标准支持的编译期断言只有一个:static_assert。static_assert是C++11标准引入的一个新关键字,用于在编译期做静态断言。它需要两个参数,第一个是一个可以在编译期返回bool值的常量表达式,第二个是一个字符串常量,用于当断言失败时编译器输出用。static_assert(sizeof(int)structValid{usingResult=__t
MagicBowen
·
2019-12-15 14:13
C++11
模板元编程
- 类型操纵
本文最开始介绍
模板元编程
的时候说过,
模板元编程
是写C++框架离不开的技术。
MagicBowen
·
2019-12-08 08:04
C++11
模板元编程
- 元编程
从本节开始我们将
模板元编程
当做一门独立的函数式语言来讨论它的方方面面。所谓元编程,就是指可以产生程序的程序。
MagicBowen
·
2019-11-08 01:20
C++11
模板元编程
- 模板的默认参数
上面例子中,栈的实现使用了std::vector。为了让栈的实现更加灵活,我们将实现栈的容器也作为模板的参数之一。template>structStack{voidpush(constT&elem){elems.push_back(elem);}Tpop(){if(empty())throwstd::out_of_range("Stack。由于在模板的形参声明过程中,后面的声明可以使用前面出现过的
MagicBowen
·
2019-11-04 09:54
C++11
模板元编程
- 元函数转发
前面介绍了元函数转发的概念,也就是通过已有的元函数组合,来定义新的元函数。如下我们实现一个元函数TypeSize用于求一个类型的size值:templateusingTypeSize=__int(sizeof(T));得益于__int()是个元函数,我们通过调用它实现了TypeSize。由于上述通过调用或者组合元函数来定义新的元函数的模式非常常用,为了简化一些临时场合下的定义方式,避免每次都要为形
MagicBowen
·
2019-11-01 04:39
C++11
模板元编程
- TypeList应用举例
使用TypeList可以一次对一组类型进行操纵,关于如何应用它是一个非常有想象力的事情。例如我们可以用TypeList轻易地实现一个trait工具,用于判断某一类型是否是C++内置类型://"tlp/traits/IsBuiltIn.h"templatestructIsBuiltIn{private:usingBuiltInTypes=__type_list(char,wchar_t,char16
MagicBowen
·
2019-10-31 05:13
C++11
模板元编程
-
模板元编程
的应用
本节开始我们通过使用C++
模板元编程
去解决一些实际问题,来展示
模板元编程
针对现实问题的使用方法和设计技巧。
MagicBowen
·
2019-10-30 21:10
停更通知
停更内容包括所有想开的、还没填的、还没填完的坑:C++11std::bind我的meds::functionC++20
模板元编程
(规划中)AVR单片机教程旋转编码器串口PWM蜂鸣器ADCLCD1602(
jerry_fuyi
·
2019-10-21 01:00
上一页
1
2
3
4
5
6
7
8
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他