C++模板与泛型
文章平均质量分 65
First Snowflakes
捡贝壳
展开
-
C++ 模板特化
原创 2021-11-22 22:00:35 · 606 阅读 · 0 评论 -
C++ STL priority_queue
与普通的queue的不同是,程序员可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队。优先队列具有队列的所有特性,并在这基础上添加了内部的一个排序,它本质是一个堆实现的,堆的插入和删除操作的时间复杂度都是log。A priority queue is a container adaptor that provides constant time lookup of the largest (by default) element, at the expense of logarithmic原创 2021-09-20 17:47:30 · 267 阅读 · 0 评论 -
基于c++模板实现反射机制
反射机制定义在Java和C#中有一个反射模式,就是可以通过类名来创建一个类的对象,C++并没有直接从语言上提供反射机制,但是可以用C++的模板实现类似的功能。例子1: Nebula网络框架中的C++反射机制实现https://zhuanlan.zhihu.com/p/40134288 中最后的例子:#pragma once#include <string>#include <iostream>#include <typeinfo>#i...原创 2021-04-05 13:03:11 · 490 阅读 · 0 评论 -
C++模板类的静态成员初始化
1. 普通类的静态成员初始化class testStatic {public: testStatic() {} ~testStatic() {} struct myStruct { myStruct(int v=9) { cout << "myStruct()"; mVal = v; } int mVal=0; }; static myStruct mStru;};//typename testStatic::myStruct ...原创 2021-04-05 12:53:36 · 1311 阅读 · 0 评论 -
C++ template metaprogram(元编程)
metaprogramming含有“对一个程序进行编程”的意思。换句话说,编程系统将会执行我们所写的代码,来生成新的代码,而这些新代码才真正实现了我们所期望的功能。通常而言,metaprogramming这个概念意味着一种反射的特性:metaprogramming组件只是程序的一部分,而且它也只生成一部分代码或者程序。我们为什么需要metaprogramming呢?和大多数程序设计技术一样,使用metaprogramming的目的是为了实现更多的功能,并且使花费的开销更小,其中开销是以:代码大...原创 2021-01-10 21:08:12 · 369 阅读 · 0 评论 -
C++ STD标准模板库的泛型思想
在C++泛型程序设计领域中,最显著的贡献就是STL(StandardTemplateLibrary),它后来被采纳并引入到C++标准库中。STL实际上是一个框架,它提供了许多有用的操作,我们也把这些操作称为算法;它同时也为对象集合提供了数据结构,我们把这些数据结构称为容器;算法和容器都以模板实现。STL实现了算法和容器的分离:算法并不是容器的成员函数,而是以一种泛型的方式编写的;因此任何容器(和线性的元素集合)都可以使用这些算法。为了实现这个目的,STL的设计者引入了一个称为迭代器的抽象概...原创 2020-11-21 09:24:27 · 603 阅读 · 0 评论 -
C++ 动多态 vs 静多态
《c++ templates, chapter14》Summary术 语:---通过继承实现的多态是 绑定的 和 动态的。绑定指: 各个子类的接口需要与公共基类的虚函数相同。 有时,也把绑定这个概念称为入侵的或插入的。动态指: 接口的绑定是在运行期完成的。用基类的指针去调用哪个子类的虚函数呢,运行时才确定;---通过模板实现的多态是 非绑定的 和 静态的非绑定指: 不需要基类提供公共的接口。静态指: 接口的绑定是在编译期完成的,即在编译器确定调用的哪个类的哪个...原创 2020-11-20 08:42:05 · 506 阅读 · 0 评论