性能测试 先放结果,经过多次性能测试并取得平均值: 明确类型的委托:执行时间:41, 内存消耗:64120 不明确类型的委托:执行时间:6339,内存消耗:1524224 通过反射Invoke执行:执行时间:1087,内存消耗:4344552 明确类型的委托 委托作为C#特殊类型,在明确委托类型下编译器则会特殊照顾,在委托类中生成隐藏的函数,如System.Action<T>的Invoke函数: .method public hidebysig newslot virtual instan…
性能测试 先放结果,经过多次性能测试并取得平均值: 明确类型的委托:执行时间:41, 内存消耗:64120 不明确类型的委托:执行时间:6339,内存消耗:1524224 通过反射Invoke执行:执行时间:1087,内存消耗:4344552 明确类型的委托 委托作为C#特殊类型,在明确委托类型下编译器则会特殊照顾,在委托类中生成隐藏的函数,如System.Action<T>的Invoke函数: .method public hidebysig newslot virtual instan…
前言 Reflection:反射,这一特性在许多主流语言中都能找到,可以在运行时动态的获取类型信息。 一些人认为在cpp中编程时,可以规避掉使用反射,转而用模板来实现,或者使用反射就是程序设计出现了问题;要么就是有关于运行时反射对于性能影响,都用到反射了还不如去用Java之类的说辞。但我认为,在cpp中还是有一些需求是可以用到运行时反射的:对象的序列化与反序列化、可以通过字符串查找类型与创建对象、运行时判断继承关系等功能。 分析 反射信息属于一种元数据,这种元数据储存了类型相关的信息,如:类型名、基类、字段、方法、…
项目地址:https://github.com/JomiXedYu/JxCode.CoreLib C++轻量对象系统,托管指针,反射,拥有统一的类型基类、常用异常类,以及事件模板等实用工具。 Feature 拥有统一的基类型Object。 拥有可以在运行时判断继承关系以及元数据的Type。 对象指针托管 concept模板约束 类型全退化等模板工具 反射获取字段与方法信息,修改字段内容与执行方法。 UTF8字符串工具类,查找,替换,编码转换等实用功能 事件委托类,接受所有类型函数的监听器。 属性模板,Get与Set…
在老版本的C++中可以在模板中使用静态断言static_assert来判断模板参数类型的合法性,使用std::is_base_of(c++11)来判断类型继承关系。 static_assert(std::is_base_of<TBase, T>::value) 使用静态断言的问题就是只会在编译器对模板实例化时才会进行静态断言,没办法在开发中就知道是否有错误。 但是使用cpp2-中引入的concept,可以使用约束运算结果来匹配模板,可以解决这个问题。 在cpp20中引入了concept,使用requir…
在标准库中有个模板函数:std::decay可以退化类型,但退化的并不完全,如const int**[]或者const int* const类型都无法做到完全退化。这里使用模板类型的递归实现: template<typename T> struct fulldecay { using type = T; }; template<typename T> struct fulldecay<const T> : fulldecay<T> { }; template<t…
Concat使用变长的参数模板来接受不同的字符串(string, const char*),为了保证string不会多次分配空间,要先求出所有字符长度之和,分配空间后在依次添加。 变长求和函数: static int _Sum() { return 0; } template<typename T, typename... TArgs> static int _Sum(T t, TArgs... args) { return t + _Sum(args...); } 调用_Sum时,第一个参数会适配T,…
此文章主要涉及C++中template与typename关键字的使用,正常情况下template用来定义模板,typename后面定义类型名字,除此之外还有些其他用处。 typename关键字告诉编译把一个特殊的名字解释成一个类型,在下列情况下必须对一个name使用typename关键字: 一个唯一的name(可以作为类型理解),嵌套在另一个类型中; 依赖于一个模板参数,就是说模板参数在某种程度上包含这个name,当模板参数是编译器在指认一个类型时便会产生误解, 如: Base<int>::name a…
在本篇文章中,Unicode指的是字符集而非UTF-16。 在Windows系统中,UTF8编码会被当作为普通的ASCII编码文件,ASCII是无法储存多字节字符的,所以使用UTF-8并且代码中存在多字节字符时会提示“该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失”,遇到这种情况就是无法正确识别UTF-8文件,所以必须添加一个BOM头,即UTF-8 BOM编码格式,才可以正确识别为UTF-8编码。 在MSVC编译器中,可以使用UTF-8 BOM、其他Unico…
1.数据传送指令 2.算数运算指令 3.逻辑运算指令 4.移位指令 5.串操作指令 6.程序控制指令 7.输入/输出指令 备注: dest 目的操作数、目的串 source 源操作数、源串 acc 累加器 count 计数值 int_type 中断类型号 short_label 短距离标号 基于转载文章修改,原文链接:https://blog.csdn.net/hanqdi_/article/details/84785038
在网站:https://developer.android.google.cn/studio?hl=zh-cn 中向下滑动,在Command line tools only部分下载工具。 压缩包.zip/cmdline-tools/* 解压到 SDK/cmdline-tools/tools/* 注意:工具压缩包中有cmdline-tools这个文件夹,但实际压缩包内的目录结构是错误的,中间缺少一级tools文件夹。 记录时间2021年4月10日,该问题具有时效性。 https://stacko…