自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 std::array使用笔记

`std::array`是`C++`标准库提供的一个封装原生定长数组的模板类

2022-12-10 10:46:32 1573 1

原创 Go定时器使用

在软件开发场景,难免会用到定时器, 在go语言中,我们一般使用标准库time就可以实现很多定时器功能。

2022-11-29 19:42:42 2250

原创 C++高级编程: 可调用对象

所谓对象,就是在内存中存在的具体实例。那可调用对象,就是可以像函数一样调用的对象。首先仿函数是一个自定义的class实例, 然后这个实例可以指定参数调用自己,实现像函数一样的行为。

2022-09-13 20:13:58 838

原创 C++ 字符串std::string的使用规范

C++ 字符串std::string的使用规范

2022-06-08 17:01:08 1013

原创 C++高级模板编程: 将tuple作为可变模板参数调用

需求描述有一个外部可变模板参数的接口,比如C++20的std::format需要将其封装成比较便捷的操作符调用方式,比如auto s = "{} {}" % T(a, b, c, ...);如何实现?需求分析首先这里需要一个T的可变模板参数函数,返回结果是一个固定类型的对象,不如就用标准库的 std::tuple吧然后还需要重载 %操作符template<typename Tuple>std::string operator%(std::string_view fmt,

2022-05-27 10:27:08 1070

原创 C/C++中整数类型隐式转换

常规同字节大小的整形转换同字节大小的整数类型,有符号可以隐式转换为无符号,反之则不行(有警告)#mermaid-svg-kWXXEkGDW25f6EtL {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-kWXXEkGDW25f6EtL .error-icon{fill:#552222;}#mermaid-svg-kWXXEkGDW25f6EtL .error-text{

2022-05-19 12:12:54 3300

原创 面向对象C语言编程

封装所谓的封装,其实就是将多个关联数据打包到一起,作为一个整体来看,也就是所谓的对象对象是什么?对象是某个具体类型的一个实例化那在C语言里面,我们有没有什么对关键数据打包继承多态泛型...

2022-03-22 16:46:09 877

原创 Python函数中的不定参数

不定参数两种形式*args: 表示匿名参数,数量不定(args名称随便起,这里只是按惯用名称)例如:def myprint(*args): for arg in args: # 这里的args类型为tuple(元组),同理,如果把一个tuple里的元素按顺序传递给另一个函数作为参数时,只需要在元组前面加上*即可拆包 print(arg)# 调用myprint(1, 2.0, 'Hello Python', True)**kwargs: 表示具名参数,传入参数时需要指定

2022-02-10 10:39:28 3638 1

原创 FFmpeg音视频解码流程

文章目录涉及到的几个头文件可库头文件链接库解码流程1. 使用`avformat_open_input`打开一个音频文件, 并获得一个 `format`句柄2. 打开成功的话,可以从`format`句柄中获取相关信息3, 获取到解码器开始解码3.1 使用`avcodec_alloc_context3`申请解码上下文句柄3.2 使用`avcodec_open2`打开解码上下文3.3 打开成功后, 可以得到`采样率`4. 开始解码4.1 申请两个解码使用对象 `AVFrame`和`AVPacket`4.2 使用`

2021-12-28 21:12:15 2979

原创 C/C++不同类型指针转换方式总结

文章目录问题背景使用C风格转换(C++中不建议甚至禁止使用)联合体(union)以下仅适用于C++使用`reinterpret_cast`借助`void *`使用`static_cast`总结问题背景在很多场合下,我们会经常需要使用一个普通结构体指针转换成uint8指针或者其他指针,这样可以将内存地址所对应的内存块以另一种含义来解释为此特总结出几种常见的转换方法使用C风格转换(C++中不建议甚至禁止使用)uint8_t *data = (uint8_t *)&some_obj;联合体(

2021-12-20 10:35:22 3184

原创 Git使用笔记(上): 基本用法

文章目录代码仓相关初始化代码仓远程仓库关联管理添加默认远程仓库`origin`的远程关联添加其他远程仓库关联移除远程仓库关联已关联远程仓库重命名更新远程仓库信息到本地克隆代码仓基本用法指定仓库名称指定分支拉取远程代码常用默认方式指定仓库名称和远程分支拉取远程非同名分支后只推进本地分支不产生合并提交代码基本用法现有文件变动全部提交当前提交点新增文件变动不产生新的提交推送代码常规用法删除远程指定分支强制推送代码仓相关初始化代码仓默认初始化~$ git init说明:初始化一个默认状态的代码仓

2021-12-05 12:01:19 578

原创 C++20 新功能concept的使用

使用C++20提供的concept关键字,引入概念,使得模板的使用更加高效、简洁与易用

2021-09-18 00:44:17 505

原创 C++参数类型的合理选用

针对不同场景,合理的选择最适合的参数类型,大大提高程序的运行效率

2021-09-18 00:21:19 872

原创 C++笔记: 模拟实现C++11的智能指针

Shared Pointer#include <cstdint>#include <iostream>struct RefCount { std::size_t ref; std::size_t weak; RefCount(): ref(1), weak(0) {}};template <typename T>struct Ref: RefCount { T data; Ref(T d): RefCount(

2021-01-29 18:18:44 139 2

原创 shell笔记: 与判断有关的那些参数

-f “/path/to/file”表示判断文件是否存在比如:[[ -f /tmp/flags ]] || echo "1" > /tmp/flags表示 当/tmp/flags文件不存在时,创建该文件并写如内容为文本1-n 和 -z “${VAR}”·-n "${VAR}" 表示 判断字符串非空, -z "${VAR}" 则相反, 比如:if [[ -z "${VERSION}" ]]; then VERSION=1.0.0fi表示当VERSION这个变量不存在或者值为空时,

2021-01-26 13:08:45 142

原创 Linux环境C/C++编程笔记之外部进程启动相关问题记录

可以使用的几种启动外部进程的方式std::system(cmd)函数popen(cmd)函数fork/vfork + exec系列函数各函数的使用方法std::system包含头文件 <stdlib.h>或者<cstdlib>函数形式:int system(const char *command);函数说明参数command: 表示shell中的命令行内容, 比如 ls -la返回值: 返回子进程所调用的外部程序退出是的return 值使用

2020-11-12 18:46:51 769

原创 C++小技巧: 集合(vector, list, map, set)的反向遍历

一般的正向集合遍历1. for/index/size模式for(int i = 0; i < collection.size(); ++i) { std::cout << collection[i] << std::endl;}弊端: 只适合std::vector这种可以通过下标随机O(1)时间访问的集合类型2. for/begin/end 模式for(auto it = collection.begin(); it != collection.end(); +

2020-09-24 15:58:01 11769 1

原创 CGO中处理C中的回调函数

CGO中处理C中的回调函数假设有一下 C语言的接口api.h#ifndef API_H#define API_H#ifdef __cplusplusextern "C" {#endiftypedef void (*IntCallback)(void *, int);void SetIntCallback(IntCallback cb, void *data);void DoIntCallback(int value);#ifdef __cplusplus}#endif#

2020-09-16 15:38:35 3448 3

原创 CGO 中对C语言的void *和void **的处理

CGO 中对C语言的void *和void **的处理1. void *与unsafe.PointerCGO中的 unsafe.Pointer与C语言中的 void *是对应的Go中的结构体如果要传入 C语言的某个函数作为参数, 可以使用 unsafe.Pointer来转化package main/*//假设这段定义在外部C源码中对cgo不可见//typedef struct User {// int id;// int age;// int number;//} User;

2020-09-16 11:43:20 2709

原创 CGO中的一些使用注意事项

1. import "C"必须是第一个import错误示范package main// #include <stdio.h>import "fmt"import "C"func main() { fmt.Println(C.puts(C.CString("这是一个golang字符串")))}应该改为package main// #include <stdio.h>import "C"import "fmt"func main() { f

2020-08-31 18:30:03 879

原创 C++冷知识: 关于类对象的手动析构对内存的影响以及使用场景

问题提出在定义某个对象时,我们其实是可以手动调用该对象的析构函数的。那么如果我们真的手动调用了析构函数,会发生什么呢?首先看一个例子#include <iostream>class Value {public: explicit Value(int val = 0) : m_value(val) { } int value() const { return m_value; } ~Value() {} private: int m_value;};

2020-08-12 10:16:56 1155

原创 零基础学iOS系列之swift语法基础

1. 变量与数据类型a) 数据类型i. 基本数据类型整数类型 Int, UInt, Int8, UInt8, Int16,UInt16, Int32, UInt32, Int64, UInt64实数类型 Double, CGFloat字符串 String集合类型 Array, Dictionary, Setii. 类型之间的转换(调用目标类型的构造函数)整数类型 –> 实数类型:let n: Int = 0 let b = Double(n)数字类型 -&

2020-08-11 17:41:52 321

原创 Golang 中的常见字节操作

简介在Go语言中, 常用来处理字节操作的数据类型是字节数组[N]byte(或者切片[]byte)为了更方便的处理字节操作, 我们可以将[]byte重新定义一个类型, 比如 Bytestype Bytes []byte字节数组与字符串Bytes 转 stringb := Bytes{232, 191, 153, 230, 152, 175, 228, 184, 128, 228, 184, 170, 229, 173, 151, 231, 172, 166, 228, 184, 178}s :

2020-07-31 15:02:48 6374

原创 Swift笔记之[UInt8]那些事

简介[UInt8]是Swift中的数组类型,也是作用比较特殊的一种数组类型, 常用于底层交互与内存操作与管理。如: 字符串编解码, 充当字节缓冲区等等字符串编解码[UInt8](或[Int8])转 StringString有对应的直接从[UInt8]或[Int8]转换成String的构造函数/// "这是一个字符串" 的utf8编码let bytes: [UInt8] = [232, 191, 153, 230, 152, 175, 228, 184, 128, 228, 184, 170,

2020-07-28 10:41:52 3644

原创 Go 实现任务队列

问题提出当某个对象的接口仅能在单线程(协程)调用时, 所有针对该对象的接口调用都应该处于同一个调度队列中。比如串口的读或者写, 如果多线程读(写)串口,难免出现数据完整性被破坏的问题。为了避免被破坏,就需要在调用接口时加锁保护。更简单一种方法就是将所有对该对象的接口调用都放在同一个调度队列中,这样每一次调用都会按先后顺序执行,不会有任何抢占资源的问题。实现原理在传统的编程语言中, 一般的思路是:一个存放任务的队列,一个用于任务队列的资源锁, 一个单独的内部线程内部线程不断的取出队列中的新任务执行

2020-07-23 10:31:50 2365

原创 SwiftUI学习笔记之异步数据请求

SwiftUI学习笔记之异步数据请求方法一方法描述:结合使用 ObservableObject @Published @ObservedObjectObservableObject定义自己的Model时,实现该协议@Published在需要变通通知的属性上标记, 可以在属性赋值时, 会通知到异步框架@ObservedObject在定义自定义Model的属性的时候, 给...

2020-04-29 10:19:00 1928

原创 SwiftUI学习笔记之@State, @Binding

SwiftUI笔记之@State, @Binding首先看一段代码//// ContentView.swift// SwiftUIGuide//// Created by Jeans Oyoung on 2020/4/28.// Copyright © 2020 Jeans Oyoung. All rights reserved.//import SwiftUIst...

2020-04-28 14:11:14 4187 4

原创 C++17 新功能介绍

C++17 新功能介绍std::any说明用来包裹任何类型的容器, 行为类似于void *, 但更安全, 有专门的类型转换api,转换的类型不匹配时会有转换异常抛出头文件 <any>示例代码std::any any = 0; // any = int(0)std::cout << std::any_cast<int>(any) ...

2020-04-22 20:02:57 414

原创 libcurl 的简单使用

使用方法#include <iostream>int main(int,char**){ curl::easy easy; if (!easy) { std::cerr << "curl::easy::init failed" << std::endl; return 1; } easy.se...

2020-04-02 09:40:43 281

原创 QML程序运行环境说明

运行库保证 系统 LD_LIBRARY_PATH所在的路径中, 包含了Qt5的运行库, 其中以下运行库是Qml程序运行所必须的最小依赖库:libQt5Qml.solibQt5Gui.solibQt5Core.solibQt5Network.solibicui18n.solibicuuc.solibicudata.so如果运行库是安装在自定义的路径(比如 /usr/loca...

2020-01-08 14:10:09 1502

原创 VirtualBox for macOS NS_ERROR_FAILURE (0x80004005) 问题解决记录

系统环境操作系统: macOS catalina(10.15)virtualbox 版本: 6.0.14 r133895问题描述升级旧版本的VirtualBox 5到VirtualBox 6.0之后, 发现 docker-machine start出现如下报错➜ ~ docker-machine startStarting "default"...(default) Check...

2019-11-18 09:12:58 9206 2

原创 Gradle从零开始创建SpringBoot项目

Gradle从零开始创建SpringBoot项目安装gradle下载Gradle的安装包(可选择二进制包或者完整包解压压缩包到安装路径, 如:~$ mkdir -p /usr/local/gradle~$ cd /usr/local/gradle~$ unzip ~/Downloads/gradle-6.0-bin.zip导入环境将Gradle的 bin目录添加到PAT...

2019-11-16 21:11:55 969

原创 C++ 网络库 cpp-netlib的简单使用

示例代码 (C++11, cpp-netlib版本:0.12.0)需要链接库文件target_link_libraries(app boost_system network-uri cppnetlib-server-parsers )#include <network/uri.hpp>#include <nlohmann/json.hpp...

2019-10-29 18:40:06 5651

原创 使用SDL2_mixer库播放MP3音乐

使用SDL2_mixer库播放MP3音乐运行环境:Ubuntu:16.04开发环境准备安装libsdl2-mixer-dev~$ sudo apt install libsdl2-mixer-dev需要包含的头文件#include <SDL2/SDL.h>#include <SDL2/SDL_mixer.h>需要链接的库文件set(CMAKE_CX...

2019-10-23 10:27:58 1731

原创 Linux 按文件列表拷贝文件到指定目录并保持原有的目录结构

需求说明当需要拷贝多个文件并且需要保留源文件的目录树结构时, 如果源目录的文件比较纯净,没有其他相关的文件或目录时, 我们只需要执行~$ #cp -r <源目录> <新目录>~$ cp -r workspace/project workspace/Cpp但是, 如果我们需要拷贝的文件所在的目录里包含了其他项目或程序的文件或目录, 那我们就不能这么干比如,在 ...

2019-10-18 09:54:19 5795

原创 MySQL C/C++客户端api(libmysqlclient-dev) 的使用笔记

MySQL 客户端 api (libmysqlclient-dev)的简单使用几个常用重要接口mysql_library_init()mysql_library_end()mysql_init()mysql_connect() / mysql_real_connect()mysql_query()mysql_num_fileds()mysql_num_rows()mysql_f...

2019-09-20 18:23:22 8254 1

原创 Ubuntu 16.04 LTS apt-get 163 镜像源配置

经常遇到Ubuntu系统默认的apt-get 配置源网络不好导致安装或者更新软件时卡很久, 因此更换国内镜像源时很有必要的以下时本人常用的163 镜像源(在线记录用)deb http://mirrors.163.com/ubuntu/ xenial main restricted universe multiversedeb http://mirrors.163.com/ubuntu/ xe...

2019-08-28 23:14:13 2345 1

原创 Kotlin学习笔记之入门篇

Kotlin 入门笔记/// 0. 程序入口fun main(args: Array<String>) { showMessage(null); showMessage("Today is Friday") showName("oyoung", 26) /// 调用形式1 showName(name = "Xiaohong", age = ...

2019-07-05 17:57:36 229

原创 C++ 11 函数参数类型传递分析与总结

C++ 11 函数参数类型传递分析与总结C++自古以来, 针对函数参数类型的传递一直都有一些约定俗成的规定, 比如:针对原始数据类型,直接使用传值形式传参void test(int number);void test(bool enable);void test(double percent);而针对结构体以及类, 通常都是:如果无需改变参数的值, 使用常量引用或者常量指针如果...

2019-06-18 10:47:30 2007

原创 Linux环境下使用nmcli管理无线网络

Linux环境下使用nmcli管理无线网络扫描无线网络使用外观模式~$ nmcli --pretty device wifi list [ifname wlan0]======================================================================== Wi-Fi 扫描列表 (...

2019-05-07 16:15:08 3500

空空如也

空空如也

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

TA关注的人

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