自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(756)
  • 收藏
  • 关注

原创 C++(23):ranges::find_last

简单的说,find_last就是从反向查找符合条件的值,然后返回一个从这个值开始的subranges。#5,find_last_if_not,找的是不符合条件的值,既不是1也不是2,所以输出。#4,由于pred(abs(x)),所以不存在-3,所以没有找到。#6,寻找既不是1也不是2和3的值,所以没找到。#2,由于是寻找最后一个-3,没有找到。

2026-04-13 16:45:54 113

原创 C++(23):iota

的意思是初始化一个迭代器的vector,里面有list.size()个,也就是8个迭代器,但是初值都是空。他的主要作用是:把区间 [first, last) 的每个元素依次赋为从。开始的递增值(++)

2026-04-13 16:01:07 35

原创 VirtualBox:Win11下开启VT-x

Win11 搜素 设备安全性 -> 内核隔离 -> 内核隔离详细信息 -> 内存完整性 -> 关闭。我通过VirtualBox安装Ubuntu虚拟就时,VT-x是灰色的,没办法开启。虽然虚拟化:已启用,但是VirtualBox中VT-x是灰色的。去掉以上没有选中,如果有Hyper-V,把它也取消勾选,重启。我是拯救者笔记本,进入Bios后,发现VT-x已经开启了。将这个命令,保存为一个文件,比如: evt.bat。无效,VirtualBox中VT-x是灰色的。无效,VirtualBox中VT-x是灰色的。

2026-04-03 14:39:23 234

原创 VSCode:控制窗口默认缩放

我在ubuntu上使用VSCode,字很小,单独调整字体,无法控制左侧的文件列表字体大小,可以通过控制窗口缩放,来进行放大。左下角点击齿轮 -> setting ,然后输入:zoom level。可以通过数字进行放大或缩小。

2026-03-31 17:42:48 53

原创 OpenClaw:agent和session

每一个agent就相当于一个独立的人,我们最好把不同类型的事,交给不同的agent来做,否则很多互不相关的事都交给一个agent来做,他很容易就造成了混乱。在左侧列表点击会话,然后选择要删除的会话前面的复选框,点击Delete进行会话删除。创建好代理后,web上是没有agent的会话的,需要先向agent发一个消息。这样之后,web上就能看到与agent的会话了,然后可以直接在web上对话。我还没有找到通过命令关闭会话的方法,不过可以通过web进行。2.4然后就是选择一个LLM,并配置api key。

2026-03-31 17:22:55 287

原创 Openclaw:使用deepseek

在配置openclaw的选模型的过程中并没有deepseek,那么如何设置为使用deepseek呢?3.重启openclaw。

2026-03-17 14:46:36 803

原创 Openclaw:在Ubuntu(25.04)上安装

最近openclaw非常火,我也尝试着使用一下,为了安全,我先通过VXBox安装了一个Ubuntu-25.04的虚拟机,然后在虚拟机里安装使用openclaw,以防止龙虾对我的真机造成破坏。第2步完成后,openclaw会自动进入配置界面,可以通过键盘的左右键进行选择,然后回车进行确认。需要在安装openclaw前先在ubuntu里安装好nodejs和npm,还有git。3.3配置模型这我选择了kimi,因为kimi新注册的用户有送流量。在其中输入,如果有答复,说明配置成功了。2.安装openclaw。

2026-03-16 12:28:22 214

原创 C++(23):反射的实现9 增加支持函数重载以及多线程

修改为std::unordered_map<std::string, std::vector<AnyCallable>>,同一个名字可以保存多个函数封装。根据是否启用mutex,选择是使用shared_mutex还是NullSharedMutex(无锁)将AnyCallable压入vector,因此可以保存多个AnyCallable对象。可以看到现在可以处理函数重载以及线程安全了。可以选择是否支持mutex的类实例。匹配输入参数,来寻找目标函数。2.2mutex的选择。

2026-02-13 15:00:20 68

原创 VSCode:避免打开新文件时会在标签页覆盖旧文件

然后取消勾选:Workbench > Editor:Enable Preview。

2026-02-13 10:42:07 255

原创 C++(23):反射的实现8 处理返回值 func_call_wrap.hpp解析

这里实现了将函数保存到map,然后在根据名字调用函数,但是有一点有点麻烦,就是需要手动处理返回值类型,func_call_wrap.hpp进一步的优化了返回值的自动转换。该函数用于判断返回值类型,如果是原生基本类型,则调用any_to_arithmetic进行转换,否则调用any_cast完成类型的转换。这个类利用了隐式转换的方式来完成类型的自动转换,也就是他首先重载了()运算符,该运输符可以用于类型的隐式转换。然后()运算符调用了as -> convert。

2026-02-12 14:35:12 50

原创 C++(23):反射的实现7 函数map func_map.hpp解析

这个函数通过名字,从func_map_找到函数封装的为AnyCallable对象,然后传递参数进行调佣,返回值是any类型,所以需要用户手动的再将any通过any_cast<T>转变为真正的返回类型。但这几个函数用起来并不是特别的方便,因为不能直接转变为返回值,所以又提供了callByNameWrap函数,后面会对这个设计进行解释。4.callByNameAs与callByName类似,只不过调用时指定了返回值类型,所以该函数直接完成了将any转变为返回值类型。把函数先通过makeCallable。

2026-02-12 13:44:17 591

原创 C++(23):反射的实现6 函数封装 any_callable.hpp解析

makeCallable_impl的返回值类型是AnyCallable,这个类型将任意函数类型进行了抽象,并将函数的签名及调用封装在了对象内部。是主要的对外接口,他会区分是否为类的成员函数,然后设定Traits,之后调用makeCallable_impl完成类型绑定。这个文件的主要作用就是把各种类型的函数转变为一个通用的类型,以备后面将其保存在一个数据结构中。用于把传入的any参数转换为stored(也就是fn)实际需要的参数类型。封装了一个lambda,用于后续完成对stored的调用。

2026-02-11 16:55:58 173

原创 C++(23):反射的实现5 类型提取 func_type.hpp解析

首先由于lambda类型没有上述的成员函数类型,所以来到了最后的operator()处,然后获取了&T::operator()类型后,进而在通过上面的类成员函数特化完成了递归的推导。args_tuple:函数的参数的tuple表示。return_type:函数的返回值类型。arg:用于获取第几个参数的类型。用于完成类的成员函数的类型获取。用于特化了函数指针类型的提取。用于特化function类型。arity:函数的参数个数。3.function类型。

2026-02-11 10:56:43 71

原创 Nlohmann json:将json array作为参数直接调用函数

json array里面可以保存不同类型的数据,那么我们可不可以直接把array解构出来,传递给一个函数呢?✓ 所有调用都不需要手动指定模板参数!=== 自动类型推导示例 ===

2026-02-01 21:55:45 67

原创 Claude Code:常用斜杠命令

CLAUDE.mdCLAUDE.md查看或更新权限。

2026-01-31 13:37:04 102

原创 Claude Code:进入dash模式

Claude Code在命令行界面,可以通过输入!可以看到,可以通过dash模式执行dash命令。

2026-01-31 10:53:54 96

原创 Claude Code:模式修改

1.默认模式:修改文件等操作前会征询用户的同意。三种模式通过shift + tab 进行切换。3.自动模式:自动操作,不需要每次进行授权。2.规模模式:只讨论,不真正的开始操作。

2026-01-31 10:30:00 712

原创 Claude Code:Ubuntu设置中转

"ANTHROPIC_API_KEY": "你的中转key","ANTHROPIC_BASE_URL": "你的中转url"export ANTHROPIC_BASE_URL="你的中转url"4.这样就配置好了claude的中转,后面启动就跟Win下是一样的了。export ANTHROPIC_API_KEY="你的中转key"在文件中的最后加入(注意上一行最后需要有逗号)

2026-01-31 09:46:18 228

原创 Claude Code:Win11设置中转

"ANTHROPIC_API_KEY": "你的中转key","ANTHROPIC_BASE_URL": "你的中转url"2.1按Win+R,弹出的窗口中输入:%USERPROFILE%ANTHROPIC_API_KEY,值就是上面json中的key。安装完成后,直接通过在cmd命令窗口中输入ccusage进行查看。ANTHROPIC_BASE_URL,就是上面json中url。3.3然后点击环境变量,在弹出的对话框中选择新建。在该目录中会发现文件.claude.json。

2026-01-30 13:00:57 1115

原创 Windows开发:PowerShell不能执行

【代码】Windows开发:PowerShell不能执行。

2026-01-30 12:11:17 108

原创 Claude Code:安装

2.安装Claude Code。1.首先安装NodeJS。

2026-01-29 11:25:05 512

原创 NodeJS:安装

然后点击Windows安装程序,就会下载安装程序。安装完成后,打开命令行窗口,输入node -v。安装完成后,再按回车即可退出。查看到版本,即可说明成功安装了NodeJS。按任意键就可以直接安装。然后点击获取Node.js。1.下载nodejs。(自动安装必要工具)

2026-01-29 10:35:47 471

原创 程序人生:AI时代,学习编程还有用吗?

4.他对C++(即使对于C++23)的理解已经很全面了,对C++模版编程的理解程度也已经非常好了,这一点我觉得国内大部分C++工程师应该也做不到(也许是我了解的有限,据我了解,目前国内能用到C++17的就算是用的比较新了,对C++23的普及应该还不高,而且大部分做业务的公司应该也比较少的使用模版编程)。其实之前我也认真的想过这个问题,也许就目前而言,初级工程师受AI的影响更大,因为已经很明确的是AI肯定超过了初级工程师的编程水平,甚至我觉得面对资深工程师,AI也还是很能打的。

2026-01-28 18:38:29 796

原创 C++(23):反射的实现4 直接通过名字调用函数

增加了callByNameWrap函数,用于处理自动类型转换,这里的关键点是函数的返回值是FuncCallResult。这个类中最为关键的就是operator T(),该运算符完成FuncCallResult到目标类型的隐式转换。已经很接近实现反射了,但是这里有一点需要改进,就是调用时还需要传递返回值类型,以下是改进后的实现。这个反射的实现基本完成了,也许还有不能覆盖的场景,但是基本上把反射实现的方式说了一下。可以看到可以直接通过名字来找到函数并完成调用,而且可以直接转换为返回值类型。

2026-01-27 16:00:52 853

原创 C++(23):反射的实现3 通过map调用函数

callByNameWithRetType:通过函数名字调用函数,获取返回值的同时获取返回值类型。由于引入了member_function_traits,所以makeCallable略作了修改。可以看到可以通过名字来调用普通函数,lambda,函数对象,成员函数,成员函数指针。callByNameAs:通过函数名字调用函数,然后把返回值转换为想要的类型。这里又对之前的定义进行了扩展,加入对类的成员函数的处理。callByName:通过函数名字调用函数。

2026-01-27 11:49:42 273

原创 C++(23):反射的实现2 将函数抽象成统一的对象

makeCallable:借助makeCallable_impl将一个函数生成一个AnyCallable对象。cast_result:用于获取通过AnyCallable完成函数调用时的返回值。可以看到通过AnyCallable 可以把各种函数进行封装,然后完成调用。validate_args:用于检查函数参数的匹配。1.首先还是function_traits。AnyCallable:用于抽象所有的函数。

2026-01-26 21:26:22 159

原创 C++(23):反射的实现1 提取函数签名

编译程序,没有报错,所以没有触发static_assert,说明上面的function_traits可以正常的提取函数签名了。1.将各种形式的函数,包括成员函数,function函数对象,lambda函数全都推导为function_traits类型。3.function_traits的args_tuple推导为通过函数参数构建的tuple<Args...>类型。2.function_traits的return_type推导为函数的返回值类型。4.function_traits的arity表示参数的个数。

2026-01-26 18:12:16 57

原创 Boost:在Win11上安装1.90.0

可以下载直接安装,但是我没有安装Vistual Studio2022,而是使用的MinGW-W64 GCC编译器。其中prefix=C:\boost_1_90_0_mingw为安装路径(不需要预先建立,b2会自己建立)执行完成后会在D:\boost_1_90_0目录下生成b2.exe文件。编译完成后会自动安装到C:\boost_1_90_0_mingw。2.将下载的代码解压至D:\boost_1_90_0。3.进入D:\boost_1_90_0目录然后执行。可以看到Boost已经成功的编译好了。

2026-01-25 22:06:57 160

原创 Openssl:完成base64编解码

也就是:base64_len = ( strlen(str_in)/3 + 1) * 4;注:base64编码后的字符串长度的计算方法为:向上取整(原始字节数 / 3) * 4。编译时需要加上链接库参数:-lssl -lcrypto。

2026-01-24 22:55:35 31

原创 Openssl:解析证书

不过目前还没找到具体的泄漏解决方法,后续找到了再进行补充。可以看到报告的是如下代码有泄漏。

2026-01-24 22:54:10 432

原创 Openssl:通过编程检查证书是否为selfsign

是selfsign证书。

2026-01-24 22:49:24 26

原创 ReadMe:分类数字说明

Linux,有4篇文章无法加入Linux开发,可以通过:进行检索。Linux开发,有6篇文章无法分类到子专栏,可以通过:进行检索。

2026-01-24 22:31:46 124

原创 C++(23):views::zip

这也就是names.size()=4, zipped size follows the shorter ages.size()=3。2.views::zip 迭代得到的元素类型是“tuple-like”,基本上可以认为是tuple<T1&, T2&, ...>所以可以通过解构直接修改源数据,也就是上例age += 1最后确实修改了ages中的值。1.zip是是基于多个ranges中最短的那个作为输出的范围。当然如果源数据是const类型的,那是不能修改值的。

2026-01-23 11:19:58 258

原创 C++(23):views::enumerate

C++20增加了Ranges和Views,C++23又将此发扬光大,Ranges和Views已经到了相当可用的程度。

2026-01-23 10:37:09 44

原创 C++(23):flat_map

C++23引入了几个新的容器flat_{set | multiset | map | multimap},这些容器其实是通过连续内存保存的经过排序后的数据。咋一听起来感觉这个设计有点无用,因为使用map这类关联容器的优点就是可以快速的插入,删除,然后查找的效率也蛮好的。如果使用连续内存(像vector),那么插入和删除的效率必然很低,因为需要移动数据。1.flat_map占用的内存更少,因为map需要有额外的指针。1.频繁插入/删除/动态更新,因为flat_map是连续内存。2.遍历很快,因为是连续内存。

2026-01-22 17:44:09 70

原创 C++(23):获取异常的调用栈信息

1.traced_level1在调用链上抛出了traced_error,这个对象里面有一个trace成员,用于记录当时的调用栈信息,所以[A]输出可以看到完整的调用栈。3.如果是普通异常,也就是没有在抛出异常时记录trace,那么在catch时也是无法查看到抛出异常时的调用栈情况的。2.如果在catch处打印调用栈,只能看到被调用时的栈情况,无法看到抛出异常时的栈情况,参考[B]输出。4.使用stacktrace,编译的时候需要链接库-lstdc++exp。

2026-01-22 15:38:04 177

原创 C++(03):异常的处理路径

2.编译器在编译时生成异常处理所需的元数据/表(unwind + handler tables),而真正发生异常时,运行时从当前栈顶开始向外走(沿调用链往上),逐帧查询该帧的异常表,查找是否存在匹配的 handler(比如。说起来虽然写了很多年的C++,但其实对于异常使用的并不多,所以也没有好好的了解异常的处理路径。5.到达最终的处理点,完成处理后,程序会继续向下处理,比如调用了log_line("main: normal end");1.异常被抛出后,后面的代码不会被执行。

2026-01-21 16:37:47 34

原创 C++(20):通过atomic_ref原子操作自定义类型变量

aref.compare_exchange_weak将新值desired写回到state时,会比较state的当前值和expected是不是一致,也就是state是否发生了变化,如果成功了那么while (true)被break,如果没有,也就是别的现场已经把state改成了另外一个值,那么这时expected会被更新为最近的state值,然后重新通过while (true)完成新值desired的写入。生成了state的一个本地拷贝expected,再通过desired设置了新值(+1)后,通过。

2026-01-21 11:23:04 351

原创 C++(23):ranges::to

C++23为容器之间的转换提供了一个比较方便的方案,那就是ranges::to。可以看到通过ranges::to可以非常方便的完成容器间的转换。

2026-01-13 21:01:42 54

原创 C++(23):一种通用log模块的实现

2.common_api.h定义了一些辅助函数,其中最为重要的就是toStr,用于将各种数据结构转为string。1.log_out.h定义了log模块的主要功能,包括设置输出等级以及输出方法还有输出内容。可以看到,基本数据类型,容器,自定义数据类型,都可以直接通过logXXX函数进行直接输出。3.key_value,h用于定义自己的数据结构,演示如果把自定义类型输出为字符串。介绍了一种比较通用的log实现,但是需要使用nlohmann/json.hpp。4.main.cpp用于完成log模块的测试。

2026-01-12 10:35:19 40

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除