C++
文章平均质量分 60
qq_16952303
这个作者很懒,什么都没留下…
展开
-
基于boost的共享内存通信demo
在一个系统比较复杂的时候,将模块独立成单独的进程有助于错误定位以及异常重启恢复,不至于某个模块发生崩溃导致整个系统崩溃。当通信数据量比较大时,例如图像数据,可以使用共享内存在进程间交互,比socket快很多。下面介绍一个利用Boost.interprocess和Boost.process模块进行进程间图像数据交互,以及子进程调用、卡死、崩溃检测的demo。原创 2024-09-10 14:52:12 · 1045 阅读 · 0 评论 -
简单好用的C++日志库spdlog使用示例
介绍spdlog日志库的使用,封装了一个好用的实例类供读者使用。原创 2024-06-19 11:25:51 · 1195 阅读 · 0 评论 -
一种license文件生成方案
有时,我们为了保护自己写的程序不被滥用(搞点钱),会想绑定硬件,还要设置使用期限。本文就实践了一种license方案,当然没有考虑逆向,这个方面也不在讨论的范畴,所以大家要保护自己的代码时请充分调研!!!首先我们要知道RSA加密是一种非对称加密,它的公钥和私钥是分开的。我们了解一下就可以知道,RSA的公钥是两个素数的乘积,它的私钥约等于需要知道这两个素数才可以得到,通过因数分解基本不可能得到私钥。所以RSA的安全性比较高。原创 2024-02-05 09:27:43 · 1755 阅读 · 1 评论 -
cmake添加pcl库后导致程序变慢之编译参数-ffloat-store
gcc -ffloat-store参数影响浮点运算性能,cmake导入某些库时可能引入该编译参数引发整体性能下降原创 2022-12-14 15:41:27 · 601 阅读 · 1 评论 -
单例模式之模板与跨库(DLL、SO)
单例模式用模板实现的话比较优雅方便,基本不需要写额外的代码。但也有个问题,就是封装成库之后,比如windows下是封装成DLL,那么DLL内的单例和外部单例将会是2个不同的实例对象,可以做实验发现2个指针是不一样的地址。这篇文章就是总结一下用模板实现单例,并且可以跨库是怎么做到的。这个宏的作用是禁止外部使用构造函数声明对象,并且添加instance()接口。大家可能会觉得有点像脱裤子放屁,但这都是为了跨库使用,并且尽可能的优美,看到最后就明白了。如果不考虑跨库使用,上面的单例模板已经做到了,\ }(原创 2022-12-12 09:27:35 · 1329 阅读 · 0 评论 -
gcc中文乱码解决——批量gbk转utf8
前言最近跨平台移植发现一个问题,就是windows下写的代码有中文的都是gbk编码,然后没中文的又是utf-8,还有一些抄来的代码是utf-8-BOM。然后网上说的加编译符号,让gcc帮你转换编码,我发现不行,因为不是gbk的文件会报错。然后还找了个脚本用iconv批量转。。。还好我是有备份的,非gbk的文件会丢失。算了,还是自己撸一个python脚本批量转码吧,不折腾了。python转换脚本非常简单,就是获取所有待转换文件,然后判断是不是GBK,是的话就转。建议你备份一下使用,这个脚本是原地覆盖的。原创 2022-04-25 15:48:00 · 1009 阅读 · 0 评论 -
用模板实现对任意函数计时功能
文章目录前言一、万能函数模板二、void返回值问题三、利用局部变量计时,解决void返回值接收问题完全版代码前言前面一篇文章利用了可变参宏去实现任意函数计时功能,总觉得有点挫,而且无法带返回值。突然想到可以用模板实现这个功能。下面讲一下实现思路和中间碰到的问题。一、万能函数模板先介绍一下万能函数模板,用下面两个函数模板,无论是全局函数,还是类成员函数,统统可以执行。原理就是万能函数指针加上可变参。省略号的位置自己体会一下。template<typename R, typenam.原创 2021-11-04 19:59:53 · 164 阅读 · 0 评论 -
在宏定义中使用可变参数实现任意函数计时打印
想实现的效果我想对任意一个函数可以实现计时打印,打印出:[函数名]:[耗时]。比如:void function(int a,int b,int c);void function2(float d);check_perf(function,a,b,c);check_perf(function2,d);有点像切片编程的意思,但是C++实现OOP还是蛮烦的,我暂时只想记个时,不想用牛刀。所以就使用了可变参的宏。主要就是涉及#、##、__VA_ARGS__三个东西。代码#include<ch原创 2021-11-04 11:14:28 · 684 阅读 · 0 评论 -
可变参函数使用方法
简单的函数定义可变参函数可以使用如下形式定义,就是多三个点void test_printf(char* format, ...);认识可变参指针首先,我们以调用vsprintf()为例来熟悉一下可变参指针:#include<stdarg.h>void test_printf(char* format,...){ va_list args; //可变参指针 va_start(args,format);//用最后一个参数告诉可变参指针的位置 vsprintf(format,ar原创 2021-11-04 09:44:28 · 223 阅读 · 0 评论 -
C++可变参模板优雅的表示函数指针
目的我们的是将函数指针R(T::ptr*)(Args...)这种形式变成 Functor<Args...>(ptr) 这种形式在一个同名函数有多个重载方法的时候,这样的方式会比较优雅。Functor是一个结构体或者类RT,这里是从Qt的源码中学到的,防走丢,上代码代码template <typename... Args>struct QNonConstOverload{ template <typename R, typename T>原创 2021-06-23 15:29:37 · 1397 阅读 · 1 评论 -
C++前置声明之模板类
突然想起来前置声明的一个小知识点,防走丢。使用场景是要在类B里面套用模板使用类A,A是前置声明,比如下面这样//假如这个文件叫B.hclass A;class B{public: std::vector<A> vec_A;}直接这样是编译通过不了的,解决办法就是在CPP文件中实例化模板类//假如这个在A.cpp中template class std::vector<A>;...原创 2021-03-30 19:48:29 · 2642 阅读 · 0 评论 -
汇编实现std::bind类似功能
引言今天群友的一发提问让我想起了很久之前自己碰到的类似的问题。大概可以这么提问来描述这个问题的本质:怎么把类成员函数变成普通的函指调用?问题点类成员函数怎么变成普通的函数指针?隐藏的this指针怎么传递?C++标准库的解决方案自从C++11之后,这都不是事。使用std::function、std::bind即可解决,大概是这样的:#include <functional>#include <iostream>using namespace std;class原创 2021-03-29 19:28:36 · 190 阅读 · 0 评论 -
简易C++配置文件读取
今天分享一个简易的C++配置文件读取器。大概能读取的格式如下:[group1]arg1=1arg2=2.0arg3=D:/123#我是一行注释[group2]arg1=woshiniyeye大概说下几个点,不懂的自行百度(大佬当我放屁,没啥高级货):完全使用标准库实现(说的屁话)单例模式call once初始化参数可以给默认值,防止没读取到值中间不能有空格组名不能重复,每个组当中的节点名不能重复值不支持中文直接上代码,先来头文件#pragma once#inclu原创 2021-03-19 20:19:47 · 947 阅读 · 0 评论 -
C++ shared_ptr与weak_ptr结合使用的例子
shared_ptr描述shared_ptr采用引用计数,指针之间共享内存,传递一次引用就加1,引用数为0时自动销毁内存weak_ptr描述weak_ptr为弱引用指针,主要用来辅助shared_ptr的使用,给它赋值不会增加引用计数,有时候不得不两者一起用,看下面一个例子。example假如我们有这样一个需求:用户需要几个API算法接口一起工作(比如处理多个视频,每个视频的...原创 2018-12-07 12:57:10 · 2193 阅读 · 0 评论 -
C++逗号和移位运算符简化写入操作
常见的移位运算符写入操作我们应该对这种操作很熟悉:cout<<1<<2<<3<<endl;没错,这会输出1,2,3。 实际上这种效果得益于重载了移位运算符,函数原型应该类似于:ostream& operator << (ostream& out,int data);能简化一下吗?现在我...原创 2018-05-09 14:27:02 · 561 阅读 · 0 评论 -
用联合体获取类成员函数地址
利用联合体获取类成员函数的真实地址原创 2016-06-20 17:53:05 · 1073 阅读 · 0 评论