C/C++
C/C++ 语法、功能小模块和系统API的使用介绍
_虚竹
一个摸着石头过河,一路在程序世界爬坑的笔记。
展开
-
boost库读写json格式文件
本文通过boost库,版本为1.84。对json格式文件创建和解析的一个简单的Demo。生成过程中可能会用到库,需要指定库路径。本文通过单个key字段进行值的获取。也有其它方式比如key1.key2.key3.xxx获取值,每一个key代表一个节点。原创 2024-01-17 17:13:09 · 735 阅读 · 0 评论 -
C++ 17/20/23可变参数模板类继承使用示例(低于c++17可参考)
C++ 17/20/23可变参数模板类继承使用示例(低于c++17可参考)原创 2022-06-16 17:28:30 · 607 阅读 · 0 评论 -
纯C++实现信号槽
前言通过纯C++代码编写类似QT的信号槽功能。其实就是观察者模式。#include <iostream>#include <vector>using namespace std;template <typename TParam>class SlotBase{public: virtual void slotFunction(TParam param) = 0; ~SlotBase() = default;};templa原创 2022-05-12 19:01:23 · 878 阅读 · 0 评论 -
jsonCPP序列化,反序列化实例
前言 通过jsoncpp库,解析json文件转换为自定义的结构。在内存中操作完成后,将结构转换为json串。在某些场景可能存在一些问题,欢迎指正,共同进步。#include <iostream>#include <json/json.h>#include <map>#include <string>#include <list>#include <memory>#include <fstream...原创 2021-09-09 14:30:59 · 657 阅读 · 0 评论 -
Linux 解析命令行参数
前言 本章以代码形式提供命令行解析Demo,虽然解析形式有千万种,但我最中这一种啊。其实是在阅读源码时候看到的,我就给提出来了。代码#include <getopt.h> std::atomic<int> g_msgCount(1);class Args {public: Args() : body("msgbody for test"), thread_count(std::thread::ha...原创 2021-08-31 15:06:37 · 267 阅读 · 0 评论 -
C++协程之Boost.Coroutine2使用
前言 线程处于进程之中,协程处于线程之中,线程有系统内核调度,而协程有程序员自己调度。一个线程可以有多个协程,而且只要内存足够,一个线程中可以有任意多个协程;但某一时刻只能有一个协程在运行,多个协程分享该线程分配到的计算机资源。协程是追求极限性能和优美的代码结构的产物。 使用过程中需要包含#include <boost/coroutine2/all.hpp>,链接动态库:-lboost_coroutine -lboost_context。关于使用boost库错误...原创 2021-08-24 17:00:34 · 2149 阅读 · 0 评论 -
C++智能指针std::shared_ptr循环引用坑
前言 本章对智能指针std::shared_ptr是如何形成循环引用做出说明。智能指针的循环引用会导致内存得不到正确的释放。示意图代码#include<memory>// 定义两个类class B;class A{ public: std::share_ptr<B> pointer; // 指向B类的智能指针对象};class B{ public: std::share_ptr<...原创 2021-08-18 16:40:29 · 248 阅读 · 0 评论 -
C/C++的可变参数函数之C风格
前言 可变参函数有C++版本通过模板实现和C风格通过函数和宏定义实现,本章对C风格的可变参函数做详细讲解,C++版本后面再上。函数和类型 实现可变参功能,需要引用头文件#include<stdarg.h>,还要熟悉类型va_list和一个宏va_arg两个函数va_start,va_end。va_list类型 其实va_list就是char* 的typedef。va_arg宏原型: type va_arg(va_list ap...原创 2021-08-18 14:55:52 · 298 阅读 · 0 评论 -
C++中获取代码块的执行时间
简介有一百种办法获取程序的执行时间,无非就是在目标代码块之前获取一次当前时间,在目标代码块之后获取一次,然后做一次时间差,然后再根据时间单位进行显示。虽然很多,但是总是忘,每次用的时候都要查下资料,所以这次记录下c++11标准实现的方法。废话不多说“野性”上代码.头文件#include <chrono>实现代码int main(){ ... auto t1 = std::chrono::steady_clock::now(); // 获取开始计算时原创 2021-08-06 16:22:04 · 731 阅读 · 2 评论 -
#pragma与_Pragma
C90为预处理指令家族带来一位新成员:#pragma。一般情况下,大家很少见到它。#pragma的作用是为特定的编译器提供特定的编译指示,这些指示是具体针对某一种(或某一些)编译器的,其他编译器可能不知道该指示的含义又或者对该指示有不同的理解,也即是说,#pragma的实现是与具体平台相关的。_Pragma是C99提供新的关键字,与#pragma功能类似。(在_MSC_VER平台是__pragma,两个下划线且p是小写。)#pragma为了让大家了解#prag...原创 2021-07-28 16:07:22 · 1088 阅读 · 0 评论