
C++模板
云飞扬_Dylan
这个作者很懒,什么都没留下…
展开
-
C++14 make_index_sequence的实现原理(简单明了)
std::make_inedex_sequence<N>的作用是产生一个0,1,2,3,....,N-1的数列。我在STL源码中没有找到实现,所以参考网上的资料,尝试着给出一份自己理解的实现。template<size_t... Args>struct index_sequence{};template<size_t N, size_t... M>struct make_index_sequence : public make_index_sequence&原创 2022-04-24 10:17:26 · 3304 阅读 · 0 评论 -
C++11模板隐式实例化、显式实例化声明、定义(简单易懂)
1. 隐式实例化在代码中实际使用模板类构造对象或者调用模板函数时,编译器会根据调用者传给模板的实参进行模板类型推导然后对模板进行实例化,此过程中的实例化即是隐式实例化。template<typename T>T add(T t1, T2){ return t1 + t2;}template<typename T>class Dylan{public: T m_data;};int main(){ int ret = add(3原创 2022-04-23 14:01:31 · 8244 阅读 · 0 评论 -
C++数组名和指针的区别
数组名是个地址常量,指向数组首元素的地址:char attr[10];对于上面的数组,attr == &attr == &attr[0], 都等于这个数组首元素的地址。sizeof(attr)是整个数组的长度。当attr作为函数参数的时候或者用attr来访问数组内元素的时候,会进行隐式转换,转换为指针常量,并指向数组首地址(其实当需要执行这段程序时,相应的数据会被加载到内存,此时内存会保留一份这样的指针常量),当访问数组元素时,就是在指针常量的基础上进行偏移。char原创 2022-03-21 11:38:48 · 1544 阅读 · 0 评论 -
零长度数组创建可变结构体
在阅读代码的时候发现,发现有的结构体末尾为附加一个0长度或者1长度的数组。其实这是一个小技巧,用这种方法可以实现变长结构体。变长结构体通常在网络通信中的报文头中比较常见。struct Extra{ int m_ext;};struct Header{ int m_data; int m_size; char extra[0];};如上所示,struct Header的最后一个字段是长度为零的char类型数组。这个数组有什么用呢?实际上它被用来表示一个地址,这个地址指向Header原创 2022-03-21 11:09:04 · 352 阅读 · 0 评论 -
C++模板类中的成员函数以及模板函数在类外定义的方式
如下模板类:template<typename T1>class Base{public: Base(T1 t1); T1 GetNum(); template<typename T2> void show(T2 t2);private: T1 num;};构造函数类外定义:template<typname T1>Base<T1>::Base(T1 t) //注意是Base<T1>{原创 2022-02-27 11:30:56 · 2601 阅读 · 1 评论