- 博客(55)
- 收藏
- 关注
原创 C++接口继承和实现继承
继承的概念是从父哪里得到了什么,儿子继承了父亲的财产,这偏重于特性的继承和代码的复用。而C++类的继承的更关注的应该是对象概念的泛化和实现,即父类是一般性,子类是特化,每一个子类都拥有父类一样的特性。C++中继承的关系表示的是is a的关系,即Derive is a kind of Base,里氏替换原则正是基于这一点,任何用父类作为参数的地方,均应该能用子类实现替换。例如,一个图形系统中的类可能既是“可绘制”的(Drawable),也是“可移动”的(Movable),这种设计可以让你灵活组合不同的行为。
2025-02-18 21:56:10
779
原创 C++性能优化—AI润色版
private:++i) {初级:掌握语言特性优化中级:理解计算机体系结构高级:具备全栈性能洞察力大师:形成性能优化直觉性能优化不是炫技,而是对效率的极致追求。在正确的时间,用正确的方法,优化正确的代码——这才是C++性能优化的真谛。
2025-02-10 21:58:56
1182
原创 C++性能优化—人工底稿版
C++以高性能著称,性能优化是C++程序员绕不过去的一个话题,性能优化是一个复杂、全局而又细节的问题,本文总结C++性能分析中常用的知识。
2025-02-10 21:55:25
503
原创 C++ 编程技巧之StrongType(2)
自定义的NamedType通过选择一些继承的Skill类,就具有了相应的增强技能,这是一种通过继承来获取基类能力的方式。)的模板类,结合了多个模板参数和特性以实现灵活的功能扩展。首先看一下NamedType模版类的定义,开门被雷暴击的感觉,这fucking啥玩意?)进行封装,这个类的设计旨在提供一种类型安全且高效的方式来定义具有特定含义的类型。这个argument在这里有点莫名其妙,但是还是有点东西,我们后面再讲。上一篇博文中介绍了Strong Type的一些基本思想,并提到了开源库。
2024-12-18 20:59:34
844
原创 C++ ADL参数依赖查找
上面的一些示例代码其实是日常中比较常见的稀疏平常的代码,但是之前基本上不知道里面还有ADL这一说法,相信大家了解ADL概念了,应该对之前一些稀松平常的代码有更深的理解。
2024-11-27 22:14:44
872
原创 FEM位移边界条件的处理
在有限元分析中,处理(如位移边界条件或特定的自由度被固定),常见的方法包括以下几种。每种方法的特点和适用场景有所不同,具体选择取决于问题性质和数值求解需求。
2024-11-24 22:27:27
600
原创 C++模版SFIANE应用踩的一个小坑
一天一个C++大佬同事,突然截图过来一段代码:这写的啥呀,啰里吧嗦的,这个构造函数模板参数T1感觉是多余的呀我说,这可能是那个不懂C++的人写出来的吧,看,写成下面的形式多简洁阿~于是就被打脸了,直接给我整出了一堆编译错误:给我整一脸懵逼,上面函数1和2好好的,咋改成3和4就不行了呢?看来,真的不能随便改别人代码。于是去网上查了查,
2024-10-06 20:47:11
1075
原创 奇异递归Template有啥奇的?
看到CRPT,第一眼应该想到,这玩意没什么特别的,就是为了实现静态多态的。静态体现在哪儿,都是模版函数,在编译期都已经展开,函数调用是写死的多态体现在哪儿,调佣基类的公用接口,最后会执行子类的具体实现,这一点和虚函数多态有点相似,但这种多态是静态的。所以,CRPT就这点东西。
2024-08-20 23:32:40
792
原创 C++用模版封装一个万能函数
这个实现通过模板参数RetType指定了返回值类型,并使用存储绑定后的函数。你能够灵活地传递不同的函数和参数,并使用仿函数的形式调用它们。这里你也可以把operator()设计成带参数的函数,只要在bind的时候留好place_holder就可以了。
2024-08-20 23:29:21
393
原创 C++模板元一生之友之:std::enable_if
你可以不懂模板元,但是你一定要懂enable_if, 因为你身边的朋友都悄悄地学会了enable_if, 并且让别人读不懂自己看起来很高端的代码。是 C++11 引入的一个工具,用于在编译时进行条件选择。它主要用来实现模板的 SFINAE(Substitution Failure Is Not An Error)机制,即在模板参数替换失败时不作为错误处理,而是选择其他可行的模板实例化。常用于函数模板、类模板和重载中,以根据编译时条件启用或禁用特定的模板实例化。
2024-08-06 23:04:18
1308
原创 有限元和稀疏矩阵
对于大规模的有限元计算,系统的整体刚度矩阵是非常耗费内存的,以百万自由度为例,刚度矩阵K的大小为100万x100万,元素大小为双精度double,占用8 byte,那么K占用的内存为100万x100万x8 byte = 8000G,这无疑是一个天量内存,好在刚度矩阵一般是稀疏矩阵,我们可以充分利用稀疏矩阵的特性来降低空间复杂度。
2024-08-06 23:03:21
1766
原创 有限元中弱形式的一些数学基础
设fff是一个定义在开区间Ω⊂RΩ⊂R上的可积函数。若存在一个可积函数ggg,使得对于任意一个紧支撑φ∈Cc∞Ωφ∈Cc∞ΩΩ\OmegaΩ∫Ωfxφ′xdx−∫Ωgxφxdx∫Ωfxφ′xdx−∫Ωgxφxdx则称ggg是fff的弱导数,记作gf′;g = f';gf′;或gddxfgdxdf。
2024-07-14 22:21:25
3126
原创 弹性力学变分原理:最小势能原理
在弹性体中,总势能Π\PiΠ包括应变能和外力势能。ΠU−WΠU−WUUU是系统的应变能。WWW是外力做的功。最小势能原理说明,在弹性体的平衡状态下,系统的总势能达到极小值。这一结论为结构分析和有限元方法提供了理论基础,通过变分法,我们能够求解平衡状态下的位移场和应力场。如何通过最小势能原理求解平衡方程?最小势能原理的适用范围是什么?对于非线弹性体是否能够推广?
2024-07-14 22:20:51
4114
2
原创 力学有限元的基石:虚功原理的推导
虚位移原理是平衡方程和力的边界条件的等效积分“弱”形式。虚位移原理的力学意义是:如果力系(包括内力和外力)是平衡的,则它们在虚位移和虚应变上所作之功的总和为零。反之,如果力系在虚位移及虚应变上所作之功的和等于零,则它们一定是满足平衡的,所以虚位移原理表述了力系平衡的必要而充分的条件。
2024-07-08 23:41:39
3139
5
原创 加权余量法求解偏微分方程
加权余量法(Weighted Residual Method)是一种数值方法,用于求解偏微分方程(PDEs)。其基本思想是将偏微分方程的残差(或余量)通过加权函数加权,并使加权余量在定义域上为零,从而形成一组代数方程进行求解。
2024-07-08 23:41:15
1384
原创 Qt中的事件循环
Gui框架一般都是基于事件驱动的,Qt也不例外,在 Qt 框架中,事件循环(Event Loop)是一个核心机制,负责管理和分发应用程序中的所有事件和消息。
2024-06-15 19:31:25
2149
原创 C++和Python相互调用(2)
编写 C++ 代码:编写你想要包装的 C++ 函数。创建包装代码:利用 Python C API 将 C++ 函数包装为 Python 函数。编写 setup.py:使用 setuptools 编译和安装扩展模块。编译扩展模块:运行 setup.py 进行编译。在 Python 中使用:导入并使用扩展模块。
2024-06-13 21:48:33
1356
原创 C++和Python相互调用(1)
Python的官方解释器CPython是用C语言编写,它提供了强大的C API,使得Python可以扩展和嵌入C和C++代码。
2024-06-13 21:43:13
539
原创 C++ XML文件和解析
DOM 解析:适合需要随机访问和操作 XML 内容的场景,使用简单但内存和性能消耗较大。SAX 解析:适合处理大文件或内存有限的场景,性能高但使用复杂。
2024-06-04 22:36:55
1600
原创 MVC、MVP 和 MVVM 架构总结
MVC是一种经典的模式,适用于基础和中等复杂度的应用程序,但可能在复杂应用中导致 Controller 过于复杂。MVP提供了更清晰的视图和逻辑分离,提高了测试性,但可能增加 Presenter 的复杂性。MVVM通过数据绑定简化了视图和逻辑的交互,适合现代前端开发,但需要掌握数据绑定技术,且在复杂应用中可能增加调试难度。
2024-05-31 21:12:56
1700
1
原创 用Visual Studio进行Qt开发的Cmake模板
使用Visual Studio进行Qt开发的时候,我们可以借用Cmake的moc功能和相应对Qt的支持生成VS工程。
2024-05-24 21:27:11
1229
原创 Qt moc系统的黑魔法?
我们可以发现,QT的元对象系统并没有什么神奇之处,主要干了下面几件事情通过一个静态成员QMetaObject存储类的元信息通过一个字符串编码存储了信号和槽函数信息通过信号和槽函数的索引。
2024-05-24 21:13:13
1313
原创 OpenMP:变量作用域
使用 lastprivate 子句声明的变量在并行区域内有线程私有副本,但在退出并行区域时,最后一个执行的线程的私有副本将被赋值给相应的共享变量。int x;i < n;// 最后一个迭代的x值被捕获// 现在x等于最后一个线程的x值。
2024-04-21 20:08:27
1399
原创 OpemMP指令: 共享任务构造
共享任务构造(Work-Sharing Constructs)将并行区域的代码执行分配给不同的线程,该指令不产生新的线程,进入共享工作区域不会有同步屏障(barrier),退出共享任务构造的时候会有隐式的同步屏障。
2024-03-22 20:46:41
483
原创 OCCT BRep数据结构
OCCT的拓扑数据结构定义在TopoDS(Topology data structure)为前缀的类中,分为两套派生结构,TopoDS_Shape和TopoDS_TShape
2024-03-20 22:17:19
786
1
原创 OpenMP API 概述
OpenMP API 包括三个独立的组件编译器指令运行时库例程环境变量不同的实现对API组件的支持有所差异,应用程序开发人员决定如何使用这些组件,对于简单的情况,只需要其中的一部分。
2024-03-11 20:01:43
1096
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人