![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程语言
文章平均质量分 74
chengjian1027
这个作者很懒,什么都没留下…
展开
-
C++标准库流输出类的一个使用问题
今天遇到一个问题,使用std::ostringstream拼装字符串,发现所有的整形打印出来后都是以逗号分隔的形式,即对于整数3600 输出为: 3,600每隔三位就会自动加上一个逗号,这样导致接受端不能将对应的字符串成功转换回整形,比如上面3,600通过atoi转换就只能得到3了上网了解了下,这个和程序运行环境的local的设置有关,C++中所有的输入输出流都使用std::loc原创 2013-04-01 23:53:09 · 1165 阅读 · 0 评论 -
卸载ACE动态库导致句柄泄漏问题
ACE动态库在反复加载和卸载后,会出现无法原创 2014-07-06 00:52:41 · 914 阅读 · 0 评论 -
对ACE锁、条件变量、信号量在windows和linux平台下的测试
Windows版本1 ACE_Thread_Mutex 场景1:4836 ACE_Thread_Mutex::acquire ret 0 [202049422-202049422].1504 ACE_Thread_Mutex::acquire ret 0 [202049422-202049522].4836 ACE_Thread_Mutex::release ret 0 [20原创 2014-04-28 23:29:22 · 990 阅读 · 0 评论 -
c++标准库容器使用概览
容器用于保存一组相同类型元素,因此一个容器可以看作是一类数据的集合。容器按其对元素的管理形式分为值容器和引用容器两种类型。值容器里,插入一个元素时,容器保存的是一个元素的副本,而引用类型容器则是保存该元素的引用或者地址。值容器可以简单的模拟引用容器,只需要把元素类型定义为指针就可以了,因此值容器更为通用。C++标准库里所有的容器都是值容器。容器按类型分类包括有序和无序两种。标准库的有序容器包括原创 2014-04-28 22:42:45 · 632 阅读 · 0 评论 -
C++程序中如何规避子进程退出过程中出现的异常
linux下通过fork方式创建的子进程,在进程退出后原创 2014-04-09 23:59:53 · 2684 阅读 · 0 评论 -
实现C++ style的动态库函数加载器(续)
templatestruct DLL{ template struct FunTypeWrapper { typedef T type; }; template struct Fun { Fun() { const char * funNmae = getSymbo原创 2014-04-30 23:00:04 · 571 阅读 · 0 评论 -
使用xml描述的数据周期统计框架
项目中经常会用到对一些数据作周期统计,从而生成报表,通常原始的数据是存放在各种数据库表里的,需要根据特定的规则进行数据统计后输出,通过写数据库的存储过程是一种方式,但存储过程一般难以跨数据库统计,而且限制于特定的数据库脚本语言,支持不同类型数据库就需要重写脚本,不易维护。所以开发一套通用的数据统计框架以及统计规则描述模板,可以用更简洁的方式来描述出统计的规则,适原创 2014-03-18 22:54:19 · 733 阅读 · 0 评论 -
实现C++ style的动态库函数加载器
动态库加载底层c运行库就三个函数 dlopen、dlsym、dlclose,非常简洁,原创 2014-04-29 23:31:22 · 509 阅读 · 0 评论 -
链接不同版本的CRT运行库导致堆错误
前两天碰到一个运行库不匹配导致程序异常退出问题,现象是这样的:首先是一个dll里的导出函数参数有一个std::string类型的出参,在可执行程序里调用了这个dll的库函数,出来后释放std::string对象就崩溃了__declspec(dllexport) void getSomething(std::string &strOut);int main(){ std原创 2014-03-29 00:29:33 · 1255 阅读 · 0 评论 -
C++标准库扩展,查找元素,使用修饰者模式构造查询条件
C++标准库的的查找算法std::find_if 允许提供一个pred函数用于在容器内查找满足pred函数调用为真的元素。同样以学生信息结构为例,常常会需要查找结构的某个成员是特定值的元素,比如查找所有计算机系的学生。每次为这种特定需求写一个函数对象不够灵活,我们也希望通过一组通用的函数对象构造模板来实现。下面这个函数对象用于比较对象的某个成员是否和输入的值相等:原创 2013-04-24 00:22:40 · 581 阅读 · 0 评论 -
C++泛型编程技巧 - 如何判断输入类型是否定义了特定的成员函数
判断一个类型包含了哪些数据或函数成员在提供了类型反射机制的高级语言上大有用处,而C++这种静态语言并未提供直接支持。需要有类似MFC一样在每个类型里编写组织相关信息的代码才行。本篇尝试使用一种非侵入式的判断方式,不需要修改原有类定义,来判断某个类型是否包含特定的成员数据或者函数举例来说,有类型A,B定义如下:class A{public: bool less原创 2013-08-24 00:23:42 · 2517 阅读 · 2 评论 -
C++封装使用隐式链表维护固定长度的内存池
所谓固定长度内存池是指每次从内存池申请的内存长度是不能变的,如果内存池初始化每块内存的大小是100字节,那么每次申请出来的内存长度就是100字节,不会多也不会少。固定长度的内存池有很多的应用场景,比如图像的编解码,码率的固定导致每帧图像的大小是比较固定的,因此可以使用固定长度的内存池来优化图像缓存的申请和释放。隐式链表是一个单向的链表,使用每块空闲内存块的前四个字节来保存下原创 2013-05-06 23:56:24 · 688 阅读 · 0 评论 -
迭代器模式
C++ stl引入的迭代器模式,除了本身为stl容器的操作提供了统一的接口,方便stl泛型算法以统一的方式操作所有stl容器外,在其它所有涉及遍历数据的应用地方,都有它的用武之地,下面列举几个我自己按迭代器模式封装的几个工具类,抛砖引玉。一、迭代分割的子串class CStrtok{public: //构造函数,接收参数 CStrtok (char *原创 2013-03-28 00:24:40 · 529 阅读 · 0 评论 -
C++实现带类型安全检测的memset
使用memset将一个c++对象清零显然是灾难性的,特别是刚从c转过来的同学,就喜欢对定义的变量来个memset,比如std::string对象,结果可想而知。c++里面专门有个概念叫做pod类型,所谓pod类型应该就是c里面的结构类型,对应的反义词就是c++的类类型因此,在pod类型上调用memset清零是安全的,而非pod上则是禁止的。pod类型的一个必要条件就是类型里原创 2013-03-23 01:11:08 · 1449 阅读 · 1 评论 -
C++标准库扩展,给结构排序
C++标准库的容器依赖less操作来比较元素的大小,比如std::sort可以传入一个pred,提供元素的less比较方法,缺省会使用std::less即调用元素的对于自定义结构类型,可能需要根据一个或者多个数据成员来比较其大小,比如如下人员信息结构,需要结合三个字段进行排序,否则不能唯一确定大小:struct Person{ std::string strName;原创 2013-04-18 00:32:20 · 600 阅读 · 0 评论 -
解决C++函数模板重载时出现的歧义,函数模板隐藏技术
函数重载是C++中实现静态多态的重要机制,在定义函数重载时,特别是在有函数模板加入时,更需要小心定义参数,防止歧义的出现举例来说,有下面两个重载函数,用于执行数据库查询并返回查询结果,分别对应到查单个值和查列表两个版本,模板类型参数V是查询结果的类型:templatelong query(const std::string &strSql, V *pv, CDBConn原创 2013-03-24 00:23:06 · 1885 阅读 · 0 评论 -
定义c++位结构
C里面有按位定义结构的方式,例如:struct SBit { int a:1; int b:2;};结构中每个成员占有的bit数可以是任意的,而且结构中间不会有字节补齐导致的空bit使用上述C结构可以满足大多数对内存按bit读写的应用,但如果字段间有间隔,就需要人为插入空字段,显得不是那么方便了。使用C++,我们想这样定义一个结构:struct SBit { BitValu...原创 2018-06-02 23:57:10 · 2203 阅读 · 0 评论