C/C++
文章平均质量分 72
Fighting Horse
专注移动端、桌面端跨平台程序架构;深入网络、音视频、3D渲染等技术应用。
展开
-
通过一个实例方法了解 C++ 的可变模版参数
对于实现基础框架的人来说,C++ 的可变模版参数真是太有用了,能够瞬间解决很多棘手的问题。下面这个例子就能够充分说明其各种强大的使用方式。原创 2022-10-22 10:30:05 · 476 阅读 · 0 评论 -
通过多线程压缩提高生成 Zip 文件的效率
在很多情况下,需要用 Zip 格式保存数据文档。当数据量较大时(超过100M),就会明显感觉到保存文件耗时很长(超过10秒),这样的用户体验难以接受,想要优化。现有开源方案多线程多文件方案方案实现...原创 2022-02-18 19:14:16 · 3014 阅读 · 2 评论 -
C++ Markdown 开源现状调研
对 Markdown 的处理一般有三个阶段:解析,编译,渲染。 解析主要是针对 Markdown 内容,分析其内容结构,输出一系列内容单元。 编译是指从 Markdown 语法结构转换为另一种文档格式。 渲染是针对编译后的文档格式进行的,一般是各个平台、框架自己的工作了。项目 功能 优势 劣势 依赖 描述 mity/md4c 解析 解析快速 集成简单 Qt 官方使用 ...原创 2021-11-05 14:12:06 · 717 阅读 · 0 评论 -
手写笔迹还原算法(InkCanvas)
因产品需求,我们打造了自主的画笔组件InkCanvas,在我们的项目纸笔课堂、晓课堂中得到了很好的应用。同时我们也通过技术输出,在直播云项目中集成了组件的核心算法,升级了其涂鸦功能中的笔迹展示效果,在多类终端(Windows、Mac、Iphone/IPad、Android Phone/Pad)中,都有不错的表现。我们今天就来分享一下画笔组件的核心算法之一 —— 手写笔迹还原算法。手写笔迹还原是将一系列有序的坐标采样点,转换为连续的笔划线条曲线的过程。...原创 2021-10-26 07:46:35 · 4061 阅读 · 1 评论 -
windows dll 的符号名称
dll的def文件与__declspec(dllexport)导出函数方式比较http://hi.baidu.com/luosiyong/item/88a97b0e3bd0ee8802ce1b0bdef文件格式http://msdn.microsoft.com/en-us/library/28d6s79h.aspx补充lib 文件中的符号名称以 int func(int原创 2013-10-30 11:28:08 · 2547 阅读 · 0 评论 -
C++ 模板 two-phase name lookup
// two_phase_name_lookup.cpp#include namespace A{ // 3: template void f(T t) { puts("A::f(T)"); }}namespace A{原创 2013-11-25 18:07:25 · 1783 阅读 · 0 评论 -
WebRTC源码环境搭建
获取depot_toolsWebRTC代码都是用depot_tools工具来管理,所以第一步就是要获取这个工具。在/chromium目录里面运行:git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git这样depot_tools工具就下载到了/webrtc/depot_tools目录里面,然后...原创 2019-04-27 09:48:15 · 1532 阅读 · 0 评论 -
构建 Aria2 (Android share library)
搭建工具环境安装系统工具sudo apt-get install autoconf ???point docbook2x tofrodos下载NDK,android-ndk-r14b-linux-x86_64.zip,解压后,在NDK目录执行:mkdir -p /mnt/work/toolchain/android-standalone-r14bexport ANDROID_...原创 2019-04-28 09:28:26 · 2670 阅读 · 1 评论 -
构建 FFMpeg (Windows MSYS2/MinGW-w64)
(一)环境准备安装 MSYS2https://github.com/msys2/msys2/wiki/MSYS2-installation安装MinGW-w64打开MSYS2 MinGW 64bit(只是一个独立环境),用 pacman 安装MinGW-w64pacman -S mingw-w64-x86_64-gccpacman -S mingw-w64-x86_...原创 2019-04-28 11:16:08 · 1042 阅读 · 0 评论 -
Java 与 C 中动态链接库搜索规则
动态链接库搜索规则1、java 中加载 native libraryjava 中 System.loadLibrary 会调用 Runtime.loadLibary,后者调用 java/lang/ClassLoader.loadLibrary。在 ClassLoader.loadLibrary 中,会检查系统属性 java.library.path ,在其指定的目录(多个)中搜索 nat...原创 2019-04-30 18:00:08 · 234 阅读 · 0 评论 -
Windows Store 平台移植 —— (2) 了解开发环境
Windows Runtime 与 Windows Desktop原创 2013-11-19 12:04:33 · 1397 阅读 · 0 评论 -
Windows Store 平台移植 —— (9) Runtime 接口实现
Runtime 接口实现原创 2013-11-20 11:18:49 · 740 阅读 · 0 评论 -
GCC attribute 机制
GNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。 __attribute__书写特征是:__attribute__前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__att转载 2008-10-24 17:40:00 · 789 阅读 · 0 评论 -
C++关键字:mutable、volatile、explicit以及__based
mutable关键字 关键字mutable是C++中一个不常用的关键字,他只能用于类的非静态和非常量数据成员我们知道一个对象的状态由该对象的非静态数据成员决定,所以随着数据成员的改变,对像的状态也会随之发生变化!如果一个类的成员函数被声明为const类型,表示该函数不会改变对象的状态,也就是该函数不会修改类的非静态数据成员.但是有些时候需要在该类函数中对类的数据成员进行赋值转载 2008-10-10 13:19:00 · 768 阅读 · 1 评论 -
getch(),getche(),getchar()的区别
这个问题,谭浩强的C语言设计第二版没有讲清楚,或者没有讲。查了查其它的资料,总算搞清楚了。 getch()、getche()和getchar()函数 (1) getch()和getche()函数 这两个函数都是从键盘上读入一个字符。其调用格式为: getch(); getche(); 两者的区别是: getch()函数不将读入的字符回显在显示屏幕上, 而转载 2008-10-11 01:28:00 · 582 阅读 · 0 评论 -
用bjam构建boost-1.36
1、下载boost包从boost网站下载boost_1_36_0.tar.gz 2、解压假设解压到D:/,那么Boost根目录就是D:/boost_1_36_0 3、构建bjam在“Boost根目录/tools/jam”下,运行build_dist.bat(Linux:build_dist.sh)将stage/bin.bin.ntx86/bjam.exe(Linux原创 2008-10-14 09:50:00 · 2324 阅读 · 0 评论 -
局部单例模式以及C++实现
什么是局部单例模式呢?关于单例模式有很多介绍,局部单例模式强调局部,普通的单例模式是全局性的,全局只有一个实例,局部单例模式是指在某个范围内只有一个实例。局部单例模式其实有很多例子,比如在一个操作系统基础上,每个进程有自己的虚拟内存池,有自己的内核句柄集合,但是共享一个CPU,这里CPU是全局单例的,而虚拟内存池,内核句柄集合是局部单例的。需要说明的是,单例有一个特性,是延迟创建,只在第一原创 2012-08-02 13:46:31 · 1199 阅读 · 1 评论 -
C++ 模板类的静态成员变量链接问题
template class A{public: static int const i = 0;};这样写,运行时会找不到 i 对应的符号,需要改成下面的写法template class A{public: static int const i;};template int A::i = 0;原因不明。上面只原创 2012-08-06 14:11:07 · 1942 阅读 · 1 评论 -
C++ 中“空引用”与“空指针”的区别
网络上有很多讨论C++ 的“引用”与“指针“的区别的文章,谈到区别,其中有一条:“引用不能为空(NULL),引用必须与合法的存储单元关联,指针则可以是NULL)”,但在实际应用中,有时候为了保持一致性,我们会抛开这个规则,人为创造出一个“空引用”。很多情况下,“空引用”确实可以工作,以致于“引用不能为空”的忠告,被嘲笑为形式主义,仅仅是标准制定者的耸人听闻。一个“空引用”的例子是:int原创 2013-08-21 10:48:23 · 30922 阅读 · 0 评论 -
关于 std::vector 的下标越界检查
当要获取 std::vector 的第 n 个元素,下面几种方式都可以:std::vector vec;size_t n = 1;int & i = vec[n];int & j = vec.at(n);int & k = *(vec.begin() + n);但是如果 n 超过了 vector 的下标范围,在几种方式的结果就有区别了,只有 at(n) 会抛出 std:原创 2013-08-22 18:08:41 · 18490 阅读 · 0 评论 -
Winrt 环境自定义 API 与系统 API 冲突解决
Winrt 环境中有许多 API 不能使用,为此需要实现缺失的 API,使许多老代码能够继续工作。但是在 VS 编译环境中提供的链接库又包含这些 API 符号的定义,使得链接时链接到这些不能使用的 API 上,应用不能正常运行,也不难通过 Windows Store 验证。原创 2013-10-30 12:08:03 · 1208 阅读 · 0 评论 -
Windows Store 平台移植 —— (8)C,C++库构建
C,C++库构建原创 2013-11-20 11:18:08 · 850 阅读 · 0 评论 -
什么是高级C++?——软件工业化时代的C++价值观
开门见山 主要论点: 1. C++本质上是一种重“创新”而轻“生产”的语言,到目前为止仍然是主流语言中最适合技术创新的一个; 2. 1995年之前,整个软件产业处于“创新为王”的阶段,C++是最适合这个阶段的语言,这是C++红极一时的大背景和根本原因。 3. 1995年发生了一系列影响深远的事件,软件产业整体上转向工业化,为了支持工业化,创新的重点由技术创新转向体系创新。然而转载 2008-10-06 15:00:00 · 1121 阅读 · 1 评论