1. any类的实现 (1)any类: ①是一个特殊的,只能容纳一个元素的容器,它可以擦除类型,可以将何任类型的值赋值给它. ②使用时,需要根据实际类型将any对象转换为实际的对象. (2)实现any的关键技术 ①当赋值给any时,需要将值的类型擦除,即以一种通用的方式保存所有类型的数据.通常是通过继承去擦除类型,基类是不含模板参数的,派生类才含有所要包装对象的类型. ②赋值时,创建派生类对象赋值给基类指针,派生类携带了数据类型,通过赋值兼容原则擦除了原始数据类型.当需要取数据时,再向下转换成派…
1. TupleHelper的主要功能 (1)打印:由于tuple中的元素是可变参数模板,外部并不知道内部到底是什么数据,有时调试时需要知道其具体值,希望能打印出tuple中所有的元素值. (2)根据元素值获取索引位置:tuple接口中有根据索引位置获取元素的接口,根据元素值来获取索引位置是相反的做法. (3)获取索引:在运行期根据索引获取索引位置的元素. (4)遍历tuple:类似于std::for_each算法,可以将函数对象应用于tuple的每个元素. (5)反转tuple:将tuple中…
1. function_traits (1)function_traits的作用:获取函数的实际类型.返回值类型.参数个数和具体类型等.它能获取所有函数语义类型信息.可以获取普通函数.函数指针.std::function.函数对象和成员函数等的相关信息. (2)实现function_traits的关键技术 ①通过模板特化和可变参数模板来实现. ②针对成员函数和仿函数的特化版本需要注意const和volatile版本的定义. ③function_traits函数的入参是可变参数模板,其类型和个数都…
1. dll帮助类 (1)dll的动态链接 ①传统的调用方式:先调用LoadLibrary来加载dll,再定义函数指针类型,接着调用GetProcAddress获取函数地址.然后通过函数指针调用函数,最后通过FreeLibrary卸载dll ②问题:使用dll的过程存在重复逻辑.此外,如果dll中的函数较多,就需要频繁的定义函数指针和反复调用GetProcAddress. (2)解决方案 ①封装GetProcAddress函数,将FARPROC类型的函数指针转换成std::function. ②…
1. optional类的实现 (1)optional的功能 ①optional<T>的内部存储空间可能存储了T类型的值,也可能没有.只有当optional被T初始化之后,这个optional才是有效的.否则是无效的.它实现了未初始化的概念. ②optional可以用于解决函数返回无效值的问题.当函数返回一个未初始化的Optional对象时,表明函数正确执行了,只是结果不是有用的值. ③举例:optional<int> op; //未被初始化. optional<int>…
1. 概要   本文描述一个通过C++可变参数模板实现C++反射机制的方法.该方法非常实用,在Nebula高性能网络框架中大量应用,实现了非常强大的动态加载动态创建功能.Nebula框架在Github的仓库地址.   C++11的新特性--可变模版参数(variadic templates)是C++11新增的最强大的特性之一,它对参数进行了高度泛化,它能表示0到任意个数.任意类型的参数.关于可变参数模板的原理和应用不是本文重点,不过通过本文中的例子也可充分了解可变参数模板是如何应用的.   熟悉…
#ifndef _ZTC_DELEGATE_H_ #define _ZTC_DELEGATE_H_ #include <vector> #include <functional> /////////////////////////////////////////////// // C++ 使用 可变参数模板类, 来实现 // C#中的 委托 // Anchor: ztc // Date : 2014-01-10 ///////////////////////////////////…
c++11 可变参数模板类 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #include <vector> #include <map> // 在C++11之前,类模板和函数模板只能含有固定数量的模板参数.C++11增强了模板功能,允许模板定义中包含0到任意个模板参数,这就是可变参数模板. // 可变参数模板类 继承方式展开参数包 // 可变参数模板类的展开一般需…
c++11 可变参数模板函数 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #include <vector> #include <map> // 在C++11之前,类模板和函数模板只能含有固定数量的模板参数.C++11增强了模板功能,允许模板定义中包含0到任意个模板参数,这就是可变参数模板. // 可变参数模板和普通模板的语义是一样的,只是写法上稍有区别,声明可变…
1. 概要   本文描述一个通过C++可变参数模板实现C++反射机制的方法.该方法非常实用,在Nebula高性能网络框架中大量应用,实现了非常强大的动态加载动态创建功能.Nebula框架在码云的仓库地址.   C++11的新特性--可变模版参数(variadic templates)是C++11新增的最强大的特性之一,它对参数进行了高度泛化,它能表示0到任意个数.任意类型的参数.关于可变参数模板的原理和应用不是本文重点,不过通过本文中的例子也可充分了解可变参数模板是如何应用的.   熟悉Java…
1. 概要   2018年Bwar发布了<C++反射机制:可变参数模板实现C++反射>,文章非常实用,Bwar也见过好几个看了那篇文章后以同样方法实现反射的项目,也见过不少从我的文章抄过去连代码风格类名函数变量名什么都没改或者只是简单改一下重新发表的.被抄说明有价值,分享出来就不在意被抄,觉得文章有用就star Nebula吧,谢谢.那些用了可变参数模板实现反射的项目或文章大都是通过这种方法实现无参数版本的类对象构建,无参版本不能充分体现可变参数模板实现反射的真正价值.上篇文章中关于Targ.…
概述 首先这篇文章出自博客园作者:[qicosmos ],我对本文的实例代码进行了学习.思考和整理纠正,理清了文章的全部细节,觉得这是一篇让我受益匪浅的文章.之所以会接触「可变参数模板」这部分的内容,是因为我当下刚好在学C++11 function机制,其内部实现需要接收不定长度的参数,因此需要用到「可变参数模板」相关的知识.本文有很多的C++模板元编程「黑魔法」是我之前从来没接触过的,比如模板递归展开.类型萃取type_traits中的基石integral_constant等等.C++的学习之…
  Introduction: Before the possibilities of the new C++ language standard, C++11, the use of templates was quite limited when it came to implementing for instance function objects (functors) & tuple facilities. Implementing these sort of things using…
1.    信使 [问题描述] 战争时期,前线有n个哨所,每个哨所可能会与其他若干个哨所之间有通信联系.信使负责在哨所之间传递信息,当然,这是要花费一定时间的(以天为单位).指挥部设在第一个哨所.当指挥部下达一个命令后,指挥部就派出若干个信使向与指挥部相连的哨所送信.当一个哨所接到信后,这个哨所内的信使们也以同样的方式向其他哨所送信.直至所有n个哨所全部接到命令后,送信才算成功.因为准备充足,每个哨所内都安排了足够的信使(如果一个哨所与其他k个哨所有通信联系的话,这个哨所内至少会配备k个信使).…
#include <iostream> #include <cstdint> #include <list> #include <string> template<typename T> typename std::enable_if<std::is_integral<T>::value, std::string>::type to_string(const T & val) { return std::to_st…
1.Window.document对象 一.找到元素:    docunment.getElementById("id"):根据id找,最多找一个:    var a =docunment.getElementById("id");将找到的元素放在变量中:    docunment.getElementsByName("name"):根据name找,找出来的是数组:    docunment.getElementsByTagName("…
一. std::async函数模板 (一)std::async和std::thread的区别 1. 两者最明显的区别在于async采用默认启动策略时并不一定创建新的线程.如果系统资源紧张,那么std::thread创建线程可能失败,系统报告异常,整个程序可能崩溃.而std::async一般则不会,它在无法创建新线程时,会将任务分配给后续调用future.get()函数的线程,并以同步的方式执行(即不创建新线程). 2. std::async表现为更高阶的抽象,它把用户从线程管理的细节解放出来,将…
C++进阶 模板 1.1 函数模板 1 #include<iostream> 2 using namespace std; 3 4 // 模板 5 6 // 模板的简单实例 7 // 要求: 8 // 1.利用函数模板封装一个排序函数,可以对不同数据类型数组进行排序 9 // 2.排序规则由大到小,排序算法为:选择排序 10 // 3.分别利用char数组和int数组进行测试 11 12 // 交换函数模板 13 template<class T> 14 void mySwap(T…
intern方法 public class Main { public static void main(String[] args) { String str1 = new String("asd"); String str2 = str1.intern();/* 字符串常量池中有,就返回字符串,没有就创建 */ System.out.println(str2); System.out.println( str1 == str2 ); } } 练习1:字符串数组排序 import j…
多线程告一段落,開始经常使用对象API的涉及,背也要背下来!.! 日后开发,遇见最多的对象是文字,也就是字符串 String类 字符串是一个特殊对象 字符串一旦初始化就不能够被改变 一.特点 public class Main { public static void main(String[] args) { Demo1(); System.out.println("--------------"); Demo2(); } /*演示字符串的第一种定义方式,并明白字符串常量池的特点*/…
C++11 tuple&可变参数模板 template void Print(T value) { std::cout << value << std::endl; } template void Print(Head head, Rail... rail) { std::cout << head << ", "; Print(rail...); } int main(int argc, _TCHAR* argv[]) { Pri…
event_bus 介绍 在前面的课程我们给大家讲过状态管理 Provider 的使用. 通俗的讲状态管理就是:当我们想在多个页面(组件/Widget)之间共享状态(数据),或 者一个页面(组件/Widget)中的多个子组件之间共享状态(数据),这个时候我们就可以 用 Flutter 中的状态管理来管理统一的状态(数据),实现不同组件直接的传值和数据共享.  event_bus 主要是实现不同组件之间的数据传值,以及在一个组件中 执行另一个组件的方法. event_bus 使用 事件广播 事件监…
第一课:开始使用Quartz框架 在你使用调度器之前,需要借助一些具体的例子去理解(谁愿意只是猜啊?).你可以使用SchedulerFactory类来达到程序调度的目的.有一些Quartz框架的用户可能会将factory的实例存储在JNDI中,其他人为了便于举例子就直接使用factory的实例(比如下文的代码片段). 一旦调度器实例化后,它就能够启动,等待执行和关闭.需要注意的是一旦调度器调用了shutdown方法关闭后,如果不重新实例化,它就不会启动了.触发器在调度器未启动时,或是中止状态时,…
从这篇教程开始将动手在TPYBoard STM32F407开发板上运行 Python 脚本,下面教大家拿到这个开发板后怎么用!(该款开发板某宝上有售) 1 连接开发板 通过 USB 线连接你的 PC 机(windows,mac,linux皆可).你不可能搞错因为仅有这么一种连接方式.当连接成功后开发板将上电和进入开机程序,绿色的 LED 灯应该在半秒或更少的时间内亮起,当其熄灭时意味着开机程序已完成. 2 安装USB驱动 Windows:开发板将作为可移动磁盘出现.Window 将自动弹出窗口界…
转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在上一篇的文章中,我们介绍了怎样实现桌面悬浮窗体,在这个效果的实现过程中.最重要的一个类就是WindowManager.今天这篇文章,将对WindowManager的使用进行介绍.而且实现一个使用WindowManager来实现用户打开APP,显示首次使用教学蒙板的效果. WindowManager类实现了ViewManager接口,ViewManager接口同意我们在Activity上加入或者是移除vi…
随着嵌入式及物联网技术的飞速发展,高性能计算的嵌入式板卡已经成为智能产品的基础硬件平台.为响应行业应用和满足客户需求,米尔电子推出基于NXP公司i.MX8M系列芯片的开发平台MYD-JX8MX系列开发板,以满足这类高性能产品的板卡要求. MYC-JX8MX核心板及开发板专为高性能人机交互,智能设备定义及设计,采用金手指核心板加接口底板结构,支持双屏显示(4K+1080P).2路MIPI-CSI视频输入.USB 3.0.Micro SD卡.4G模块. WIFI / BT.以太网.SSD支持等外设接…
米尔MYD-JX8MX开发板移植了Android9.0操作系统,现阶段最高版本的Android9.0操作系统将给您的产品在安全与稳定性方面带来更大的提升.可惜了,这里不能上传视频在i.MX8开发板跑Android9.0的演示视频.感兴趣的可以看 米尔MYIR 公众号推送的文章,里面有Android9.0演示视频文件. 简单介绍这款imx8开发板 随着嵌入式及物联网技术的飞速发展,高性能计算的嵌入式板卡已经成为智能产品的基础硬件平台.为响应行业应用和满足客户需求,米尔电子推出基于NXP公司i.MX…
C++11 1.long long新类型 2.列表初始化 int t=0; int t={0}; int t(0); int t{0}; 注意:如果我们使用列表初始化有丢失信息的风险,则编译器报错 long double ld=3.1415926536; int a{ld},b={ld};//错误 int c(ld),d=ld;//正确,会丢失数据 3.空指针nullptr int *p1=nullptr; int *p2=0; int *p3=NULL;//尽量避免 4.constexpr类型…
版本 日期 作者 说明 V1 2016.07.29 韦东山 第1版本,Android部分未写 我是1999年上的大学,物理专业.在大一时,我们班里普遍弥漫着对未来的不安,不知道学习了物理后出去能做什么.你当下的经历.当下的学习,在未来的一天肯定会影响到你.毕业后我们也各自找到了自己的职业:出国深造转行做金融.留校任教做科研.设计芯片.写程序.创办公司等等,这一切都离不开在校时学到的基础技能(数学.IT.电子电路).受过煅炼的自学能力. 所以,各位正在迷茫的在校生,各位正在尝试转行的程序员,未来一…