C++
文章平均质量分 76
RangoLei_Lzs
专注CAD、CAE工业软件开发,大型客户端软件架构,C++,算法,力学
展开
-
CMake构建工程基本要素
在使用 CMake 构建项目时,CMakeLists.txt 文件是用来定义构建流程的核心文件原创 2024-10-06 21:27:08 · 233 阅读 · 0 评论 -
C++模版SFIANE应用踩的一个小坑
一天一个C++大佬同事,突然截图过来一段代码:这写的啥呀,啰里吧嗦的,这个构造函数模板参数T1感觉是多余的呀我说,这可能是那个不懂C++的人写出来的吧,看,写成下面的形式多简洁阿~于是就被打脸了,直接给我整出了一堆编译错误:给我整一脸懵逼,上面函数1和2好好的,咋改成3和4就不行了呢?看来,真的不能随便改别人代码。于是去网上查了查,原创 2024-10-06 20:47:11 · 988 阅读 · 0 评论 -
奇异递归Template有啥奇的?
看到CRPT,第一眼应该想到,这玩意没什么特别的,就是为了实现静态多态的。静态体现在哪儿,都是模版函数,在编译期都已经展开,函数调用是写死的多态体现在哪儿,调佣基类的公用接口,最后会执行子类的具体实现,这一点和虚函数多态有点相似,但这种多态是静态的。所以,CRPT就这点东西。原创 2024-08-20 23:32:40 · 737 阅读 · 0 评论 -
C++用模版封装一个万能函数
这个实现通过模板参数RetType指定了返回值类型,并使用存储绑定后的函数。你能够灵活地传递不同的函数和参数,并使用仿函数的形式调用它们。这里你也可以把operator()设计成带参数的函数,只要在bind的时候留好place_holder就可以了。原创 2024-08-20 23:29:21 · 351 阅读 · 0 评论 -
C++模板元一生之友之:std::enable_if
你可以不懂模板元,但是你一定要懂enable_if, 因为你身边的朋友都悄悄地学会了enable_if, 并且让别人读不懂自己看起来很高端的代码。是 C++11 引入的一个工具,用于在编译时进行条件选择。它主要用来实现模板的 SFINAE(Substitution Failure Is Not An Error)机制,即在模板参数替换失败时不作为错误处理,而是选择其他可行的模板实例化。常用于函数模板、类模板和重载中,以根据编译时条件启用或禁用特定的模板实例化。原创 2024-08-06 23:04:18 · 703 阅读 · 0 评论 -
C++和Python相互调用(2)
编写 C++ 代码:编写你想要包装的 C++ 函数。创建包装代码:利用 Python C API 将 C++ 函数包装为 Python 函数。编写 setup.py:使用 setuptools 编译和安装扩展模块。编译扩展模块:运行 setup.py 进行编译。在 Python 中使用:导入并使用扩展模块。原创 2024-06-13 21:48:33 · 1214 阅读 · 0 评论 -
C++和Python相互调用(1)
Python的官方解释器CPython是用C语言编写,它提供了强大的C API,使得Python可以扩展和嵌入C和C++代码。原创 2024-06-13 21:43:13 · 429 阅读 · 0 评论 -
C++ XML文件和解析
DOM 解析:适合需要随机访问和操作 XML 内容的场景,使用简单但内存和性能消耗较大。SAX 解析:适合处理大文件或内存有限的场景,性能高但使用复杂。原创 2024-06-04 22:36:55 · 1250 阅读 · 0 评论 -
MVC、MVP 和 MVVM 架构总结
MVC是一种经典的模式,适用于基础和中等复杂度的应用程序,但可能在复杂应用中导致 Controller 过于复杂。MVP提供了更清晰的视图和逻辑分离,提高了测试性,但可能增加 Presenter 的复杂性。MVVM通过数据绑定简化了视图和逻辑的交互,适合现代前端开发,但需要掌握数据绑定技术,且在复杂应用中可能增加调试难度。原创 2024-05-31 21:12:56 · 1547 阅读 · 1 评论 -
OpenMP 编程模型
OpenMP 专为多处理器/核心、共享内存机器设计,底层架构可以是共享内存UMA或NUM原创 2024-03-13 20:48:32 · 824 阅读 · 0 评论 -
OpenMP API 概述
OpenMP API 包括三个独立的组件编译器指令运行时库例程环境变量不同的实现对API组件的支持有所差异,应用程序开发人员决定如何使用这些组件,对于简单的情况,只需要其中的一部分。原创 2024-03-11 20:01:43 · 1015 阅读 · 1 评论 -
OpenMP简介
OpenMP 是一个应用程序接口 (API),由一组主要的计算机硬件和软件供应商共同定义。OpenMP 为共享内存并行应用程序的开发人员提供了一个可移植、可扩展的模型。该 API 支持各种架构上的 C/C++ 和 Fortran。原创 2024-03-10 20:40:06 · 471 阅读 · 1 评论 -
C++11多线程基础入门
C++11多线程基础知识点原创 2024-03-03 20:33:10 · 1253 阅读 · 0 评论 -
C++模板元一生之敌之:std::disconjunction
disconjunction是上篇介绍的conjunction的同胞兄弟,模板参数包中至少有一个为ture时,其value为true,相当于对一系列类型特性(type traits)做逻辑或原创 2024-03-01 21:36:33 · 513 阅读 · 1 评论 -
C++模板元一生之敌之:std::conjunction
std::condition相当于对一系列类型特性(type traits)做逻辑与(And),例如conjunction<T1,T2,T3,>,如果T1,T2,T3能够萃取出bool类型的value,那么上面试式子相当于T1::value && T2::value && T3::value,按照惯例先看应用场景,condition可以用来判断一系列类型是否相同。想要理解这几行代码,首先需要理解递归模板,相信诸位接触过模板元的都知道用模板实现递归计算阶乘的代码。原创 2024-02-29 20:50:49 · 639 阅读 · 0 评论 -
C++ STL分配器rebind
大部分人在学习STL源码的时候,都会参考侯捷老师的《STL源码剖析》,在第二章介绍分配器的时候,出现过rebind的身影:这段代码神秘的出现在了这里,然后了无后续,相信给很多人造成了STL修仙练气期的心里阴影。原创 2024-02-27 19:43:37 · 689 阅读 · 0 评论 -
C++惯用法之:copy and swap idiom
如果拷贝构造函数中发生了异常,对象就不会被修改,因为当前对象的状态只在交换操作中发生变化,这使得整个赋值操作在异常发生时,对象状态仍然保持一致。考虑一个类,其中有成员变量是指针,而拷贝赋值操作需要分配内存,如果分配失败,将抛出异常,如果在这个过程中抛出异常,可能会导致对象的数据处于损坏的状态。这种方法的基本思想是,首先通过深拷贝源对象(operator = 右边的对象)创建一个临时对象,然后与当前对象进行交换。这样,传入对象的资源会转移到当前对象,当前对象原有的资源也能正确释放。操作中抛出了异常,对象的。原创 2024-02-25 21:40:17 · 633 阅读 · 0 评论 -
记一次离谱的unordered_map性能退化
有时候直觉是不准确的,数据结构和算法有时候还是有点用处原创 2024-02-24 22:12:58 · 1579 阅读 · 0 评论 -
C++ std::vector和移动优化
移动语义下,vector扩容时就有了优化的空间,毕竟原来对象的资源是可以重复使用的,vector也确实使用移动构造来代替拷贝构造,但是这种优化是有限制的,即vector中存储对象必须有移动构造函数,而且需要是noexcept的。因为移动构造会损坏源对象,如果对象移动的过程中发生了异常,那么原来的vector的数据就处于损坏的状态,而且不可恢复,为了保证异常安全,因而才有noexception的限制。对于左值,直接用拷贝构造函数构造在容器,对于右值,直接用移动构造构造在容器,只需要调用一次构造函数。原创 2024-02-21 08:00:51 · 2416 阅读 · 1 评论 -
STL迭代器引发的崩溃问题
1、写符合C++规范的代码,通过基类指针析构子对象,没有虚析构函数是不符合规范的代码,不符合规范就容易坑你。2、STL的调试版迭代器还是很强大,这种防御性编程,能够帮你快速的定位到程序潜在的问题,否则无端的崩溃会让你怀疑人生。原创 2024-02-23 21:25:34 · 1592 阅读 · 0 评论 -
C++两万字长文总结
2万字长文,纵观C++全貌原创 2024-02-05 19:26:38 · 1328 阅读 · 3 评论