相关推荐
理解 Golang interface
interface 是GO语言的基础特性之一。可以理解为一种类型的规范或者约定。它跟java,C# 不太一样,不需要显示说明实现了某个接口,它没有继承或子类或“implements”关键字,只是通过约定的形式,隐式的实现interface 中的方法即可。因此,Golang 中的 interface 让编码更灵活、易扩展。...
彻底搞懂多态
完全可以,事实上,像c#,rust,go,Swift这些语言都是这么做的,不管继承多少个接口,都不会增大对象的体积,只有在真正动态使用时,才会生成虚函数表指针,并且和指向对象的指针绑定在一起,也就是所谓的胖指针(fat pointer)。事实上,这也正是存在类型的本质,理想情况下,所有的接口都应该通过泛型函数去调用。传统的虚函数对这个问题束手无策,使用非侵入式多态的新语言也没什么好办法,对于comparable这种的接口,要么只静态使用,要么求助于dynamic_cast这样的机制,显然,这不是好办法。
java非侵入式接口实现,C++编写非侵入式接口
终于写到c++的非侵入式接口了,兴奋,开心,失望,解脱,…… 。在搞了这么多的面向对象科普之后,本人也已经开始不耐烦,至此,不想做太多阐述。虽然,很早就清楚怎么在c++下搞非侵入式接口,但是,整个框架代码,重构了十几次之后,才终于满意。支持给基本类型添加接口,好比int,char,const char*,double;支持泛型,好比vector,list;支持继承,基类实现的接口,表示子类也继承了...
侵入式容器及Boost.Intrusive
非侵入式容器存储的是对象的拷贝,而不是传递给容器的原始对象,例如STL容器,当插入对象时,需要申请内存存放拷贝的对象,而对象在容器内的关系是由容器本身数据结构来维护的,内容内对象本事并不知道容器信息。侵入式容器直接存储传递给容器的原始对象,而不是对象的拷贝。对象内部维护和容器之间的关系。
从零实现基于红黑树的C++ Map与Set:深入理解STL容器底层原理
红黑树作为一种自平衡二叉搜索树,通过颜色标记和旋转操作维持近似平衡,确保插入、删除、查找等核心操作的时间复杂度稳定在O(log n)。这一特性使其成为实现高效关联容器的理想底层数据结构,广泛应用于需要快速查找和有序存储的场景,如数据库索引、内存缓存和编译器符号表。在C++ STL中,map和set正是基于红黑树构建,提供了键值对和键的唯一有序存储。本文聚焦于红黑树的实现原理与工程实践,通过模板编程技巧,设计通用红黑树结构,并基于此封装出功能完整的Map和Set容器,涵盖迭代器设计、插入删除的平衡调整等关键技
C++函数模板实战:从崩溃max到工业级日志系统
函数模板是C++类型系统与编译期计算能力的核心交汇点,其本质并非语法糖,而是实现类型安全、零开销泛型的关键机制。它通过模板参数推导、SFINAE、constexpr if等特性,在编译期为不同数据类型生成最优机器码,支撑高性能序列化、无虚函数类型擦除及向量化运算等关键场景。本文聚焦函数模板的工程落地,深入剖析模板参数推导冲突、自定义类型比较缺失、日志零开销开关等真实痛点,并以max函数演进、类型安全日志、碰撞检测重构为线索,展现如何用可变参数模板、std::common_type、ADL规避与折叠表达式构建
深入C++与QT高频面试题(不定时更新)
本文总结了C++、数据库和Qt相关的常见面试题,涵盖以下核心内容: C++特性与智能指针 智能指针(unique_ptr/shared_ptr/weak_ptr)解决内存管理问题 构造函数/析构函数特性,虚函数与纯虚函数区别 STL容器分类与特性(vector/list/set/map等) 多线程编程 线程创建方式(Thread类/moveToThread) 线程同步机制(互斥锁/条件变量/读写锁) 进程间通信方式(管道/共享内存/消息队列) 数据库基础 事务ACID特性与操作流程 索引原理与使用场景 关系
侵入式容器
侵入式容器也是用于容纳元素的容器,但元素必须要做出一些代码上的适度修改才能被容纳。与侵入式容器相对应的是非侵入式容器,标准容器和指针容器都属于非侵入式容器,这类容器不要求对容纳的元素做任何修改即可容纳,较温和,用起来也简单方便。链表、二叉树等数据结构都属于侵入式容器。
侵入式和非侵入式
侵入式和非侵入式侵入式利弊非侵入式利弊拓展小结 侵入式 一句话概括就是,你的代码需要依赖框架的代码,如果把框架拿掉或者换一个框架,就需要重新修改代码。 举个很简单的栗子啦: 1.如果使用侵入式的框架,一般需要继承或者实现框架的某一个类或接口,这样你把框架拿到以后就会运行不起来,甚至在代码层面会报错哦。 2.当你的代码引入了一个组件,导致其它代码或者设计,要做相应的更改以适应新组件.这样的情况我们就...
告别继承!Folly Poly实现无侵入式C++运行时多态的终极指南
在C++开发中,传统继承带来的耦合性和侵入性一直是开发者头疼的问题。Facebook开源的Folly库提供了一个革命性的解决方案——**Folly Poly**,它通过类型擦除技术实现了真正的无侵入式运行时多态。本文将带你深入了解这项强大技术,彻底摆脱继承枷锁,构建更灵活、更优雅的C++代码架构。 ## 🧩 什么是Folly Poly? **Folly Poly**是Facebook开源C+
Golang系列(四)之面向接口编程
1. 接口[多态] 多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。 简而言之,就是允许将子类类型的指针赋值给父类类型的指针。 即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。不修改程序代码就可以改变程
java 非侵入式_非侵入式设计 和侵入式设计 意思?
非侵入式系介绍DI用语,我得理解是两个组件(类,接口)之间,比较独立,不深入到另一个类内部,哪位大虾能点拨一二?关于“侵入式”和“非侵入式”设计有读者讲“侵入式”这一术语无法理解,这里给一个简单解释,是我个人的看法。在设计一个类时,按理说,需要考虑的应该只是该类所企图表示的那个“概念”本身:为表示有关概念应记录哪些信息,该类的对象与外界交换信息的界面等等。但定义这个类并不是为了放在那里观赏,而是为...
侵入式、状态管理
什么是侵入式和非侵入式编程? 侵入式:引入了框架,对现有的类的结构有影响,需要实现框架的某些接口或者某些特定的类。是用户的代码对框架产生了依赖,不利于代码的复用性,将框架去除后,程序无法运行。好处是使用户代码与框架更好的结合,充分利用了框架提供的功能。 非侵入式:引入框架,对现有的类的结构没有影响,不需要实现某些接口和特定类。移出框架程序也可正常运行。缺点与用户代码互动的方式可能比较复杂;优点没有过多的依赖,能够很方便的迁移到其他地方。 什么是有状态会话和无状态会话? ...
Go语言之interface详解
go语言interface详解,interface的使用场景,实现多态示例,
C++STL模板笔记(一)
C++STL模板笔记
做Spring开发,这些知识你会了吗
Spring 开发 1. 什么是Spring? 2. Spring Framework 3. IOC容器 1)IOC容器原理 2)依赖注入方式 3)无侵入容器 4)理解 5)装配 Bean 6)ApplicationContext 7)使用Annotation配置 4. 使用 AOP
侵入式及非侵入式概念
注:此篇博客的内容主要摘录自其他人的博客,并加以整理,下述会给出详细出处。 侵入式与非侵入式设计:在学框架时,经常会遇到侵入式设计与非侵入式设计?究竟是什么意思? 参考侵入式与非侵入式概念。 这两种设计,主要是基于系统扩展性以及依赖性来说的。 当我们用Struts2框架做系统时,Action需要继承Struts2的一个基类,这样我的代码就被侵入了(基类中的部分内容和方法与我的设计内容不相关),如...
Boost序列化全解析
程序开发中,序列化是经常需要用到的。像一些相对高级语言,比如JAVA, C#都已经很好的支持了序列化,那么C++呢?当然一个比较好的选择就是用Boost,这个号称C++准标准库的东西。 什么时候需要序列化呢?举个例子,我们定义了一个class,比如: class CCar { public: void SetName(std::string& strName){m_strName = strName;} std::string GetName() const{return m_s...
957




被折叠的 条评论
为什么被折叠?



