C++
成都刘德华2012
这个作者很懒,什么都没留下…
展开
-
C++设计模式——简单工厂模式、工厂模式、抽象工厂模式
1、简单工厂模式:C++设计模式——简单工厂模式2、工厂模式:C++设计模式——工厂方法模式3、抽象工厂模式:C++设计模式——抽象工厂模式原创 2014-02-10 15:42:10 · 1395 阅读 · 0 评论 -
C++设计模式——基础概念
is-a 继承has-a 组合use-a 依赖原创 2014-05-19 14:10:44 · 916 阅读 · 0 评论 -
可重入函数与不可重入函数
http://baike.baidu.com/view/2394660.htm转载 2013-07-18 23:29:05 · 1091 阅读 · 0 评论 -
openssl在windows编译及使用
http://www.cnblogs.com/ziwuge/archive/2012/01/12/2320065.html转载 2013-07-18 23:39:38 · 2849 阅读 · 0 评论 -
OpenSSL在linux下的编译安装与使用
OpenSSL在Windows上的安装使用请见这里:openssl在windows编译及使用。首先,一般Linux上都会已经安装了OpenSSL的,可以使用openssl version -a当然,如果你是做OpenSSL的开发,那系统默认这点肯定是不够的,下面我们开始完全安装。一、准备1、下载OpenSSL,官网这里。2、需要先安装zlib,这里很详细:Linux下zli原创 2013-07-31 22:32:16 · 19986 阅读 · 0 评论 -
google glog的简单封装
void InitGLog(const char * szLogFile, int nLevelPrint = google::WARNING, int nLevelFile = google::INFO){ CHECK_NOTNULL(szLogFile); // 设定异常处理函数 // google::InstallFailureFunction(&MyFailureFunction原创 2013-11-01 10:43:30 · 4816 阅读 · 2 评论 -
jsonc的基本使用
官方中文主页:http://www.json.org/json-zh.html原创 2014-05-21 10:39:56 · 3687 阅读 · 0 评论 -
boost中property_tree操作内存中的数据
void ReadJson(const char * szJson){ std::stringstream ss(szJson); boost::property_tree::ptree pt; boost::property_tree::read_json(ss, pt); // 读取数据 // pt.get("cmd"); return;}void WriteJso原创 2014-05-23 09:59:08 · 1356 阅读 · 0 评论 -
Boost库bind接口轻松实现类成员函数作为回调函数
C++中,将非类成员函数或者类的静态成员函数作为回调函数实现起来非常简单,但是将类的成员函数作为回调函数使用实现起来就相对较复杂,因为成员函数的调用必须有具体的实例对象支持。最近在学习BOOST库,发现BOOST库实现类成员函数作为回调函数非常容易,故发文以作简单总结。 简要介绍了BOOST库,BOOST库又被称为C++准标准程序库,库中大部分特性都被收录在C++11中,下面用到的fun转载 2014-07-04 13:25:54 · 9523 阅读 · 0 评论 -
boost读写锁
boost::shared_mutex是共享锁,有lock、unlock方法以及shared_lock、shared_unlock方法。 boost::shared_mutex可以用来实现读写锁。多线程中的一个经典问题是一写多读,即当有线程发生写操作时,所有其他线程的读操作暂停,其他时刻,允许多个线程同时读操作。使用boost::shared_mutex构造读写锁时需要使用到b原创 2014-05-13 10:01:57 · 2702 阅读 · 1 评论 -
BOOST之property_tree 及解析XML详解
摘要:property_tree是一个保存了多个属性值的属性数据结构,可以用类似路径的简单方式访问任意节点的属性,而且每个节点都可以用类似STL的风格遍历子节点。property_tree特别适合于应用程序的配置数据处理,可以解析xml、ini、json和info四个格式的文本数据。在处理四种格式的文件时,除包含头文件、读文件、写文件时有部分区别外,其他对文件内部数据操作时基本一致(因为文原创 2013-05-23 23:31:25 · 11270 阅读 · 2 评论 -
BOOST之property_tree对XML修改和保存
关于property_tree对XML的解析介绍请参见:BOOST之property_tree 及解析XML详解 。一、对XML的修改如前面所说,property_tree对XML是解析中内部数据结构模式为list,首先,打开xml文件,然后通过get_child直接定位到目标节点,这是目标节点的属性、注释、数据均变为list的一个子节点,在官方文档里查阅到如下定义:typedef原创 2013-06-06 23:54:25 · 3939 阅读 · 0 评论 -
boost中result_of简单使用
#include int main(){ typedef double (*Func)(double d); // 函数指针定义 Func func = sqrt; // 函数指针赋值 boost::result_of::type x = func(5.0); // 类型推导 std::cout<< "x: " << x << std::endl; std::cout原创 2014-05-23 16:48:00 · 1609 阅读 · 0 评论 -
std::tr1::shared_ptr源码赏析
vs2010的std::tr1::shared_ptr和boost的shared_ptr比起来简单易懂,代码短小精悍。我没有细读过boost::shared_ptr的代码,粗略看过,细节上的区别还是很大的。大致结构shared_ptr是一个模板类,派生自_Ptr_base。其中_Ptr_base内记录的_Ty*是用户创建shared_ptr时传入的要管理的指针;而_Ptr_base转载 2014-02-26 18:35:57 · 4423 阅读 · 1 评论 -
BOOST 在Windows和Linux下的安装及说明
一、下载:http://www.boost.org/users/download/ 如boost_x_xx_x.zip二、安装:一)Windows解压到某目录(E:\boost_x_xx_x\),执行bootstrap.bat,在运行编译程序b2.exe,最后显示: The Boost C++ Libraries were successfully built!原创 2013-05-23 21:52:12 · 1994 阅读 · 0 评论 -
shared_ptr简介以及常见问题
本文中的shared_ptr以vs2010中的std::tr1::shared_ptr作为研究对象。可能和boost中的有些许差异,特此说明。基本功能shared_ptr提供了一个管理内存的简单有效的方法。shared_ptr能在以下方面给开发提供便利:1、 使用shared_ptr能有效的解决忘记释放内存带来的内存泄漏问题。同时通过自定义删除器功能还能广泛的用于任转载 2014-02-26 18:22:13 · 4706 阅读 · 0 评论 -
STL标准容器类简介
<!--@font-face {font-family:宋体}@font-face {font-family:"Cambria Math"}@font-face {font-family:Verdana}@font-face {font-family:"\@宋体"}p.MsoNormal, li.MsoNormal, div.MsoNormal {margi转载 2013-04-28 18:17:54 · 1026 阅读 · 0 评论 -
C++ 仿函数
/******************************************************************* * Copyright (C) stechrayo * Author : stechrayo * Create : 2013-4-28 10:51 * Mail : stechrayo@gmail.com *原创 2013-04-28 10:50:58 · 1298 阅读 · 0 评论 -
C++ STL 算法列表
<!--@font-face {font-family:宋体}@font-face {font-family:黑体}@font-face {font-family:"Cambria Math"}@font-face {font-family:Calibri}@font-face {font-family:"\@黑体"}@font-face {font原创 2013-04-28 17:47:53 · 1634 阅读 · 0 评论 -
C++设计模式——单例模式
template class SingletonTmpl{public: static CBase *Instance() { if (0 == m_instance) m_instance = new CBase(); return m_instance; } static void Destroy() { if (0 != m_instance) {原创 2014-02-13 14:47:08 · 744 阅读 · 0 评论 -
宏的高级使用--##,__VA_ARGS__, __FILE__, __FUNCTION__等
先说一下本文中会提到的内容:##,__VA_ARGS__, __FILE__, __LINE__ , __FUNCTION__等。例如:#define myprintf(...) printk("[lch]:File:%s, Line:%d, Function:%s," __VA_ARGS__, __FILE__, __LINE__ ,__FUNCTION__);此处的 #define 的作用转载 2014-01-23 16:52:54 · 1134 阅读 · 0 评论 -
C++ 模板静态成员变量
#include using namespace std;template class testClass {public: static int _data;};// 为 static data members 进行定义(配置内存),并设初值。int testClass::_data = 1;int testClass::_data = 2;int main(){原创 2013-04-29 11:13:28 · 2778 阅读 · 1 评论 -
C++模板中关键字typename与class的区别
在C++里,不管是模板函数,还是模板类,均会用关键字typename和class来指定模板类型。对于模板函数与模板类的使用请自行参考:C++ Primer中文版 。但是为什么要用两个关键字呢,一个不就可以了吗?反正都是用来作为指定某变量的类型要在编译的时候才会被确定。根据我查阅的资料,注释内容 typename和class的区分 与 C++箴言:理解typename的两个含义 猜测在早转载 2013-06-06 22:18:36 · 2714 阅读 · 0 评论 -
C++标准IO库
本文摘自:《C++ Primer》中文版第四版,第八章——C++标准IO库• cin(发音为 see-in):读入标准输入的 istream 对象。• cout(发音为 see-out):写到标准输出的 ostream 对象。• cerr(发音为 see-err):输出标准错误的 ostream 对象。cerr 常用于程序错误信息。• >> 操作符,用于从 istream 对象中读转载 2013-07-14 16:24:19 · 1081 阅读 · 0 评论 -
C++内存泄露检测工具Visual Leak Detector的使用
Visual Leak Detector,主页地址:http://vld.codeplex.com/。是一款免费的、健全的、开源的Visual C++内存泄露检测系统。相比Visual C++自带的内存检测机制,Visual Leak Detector可以显示导致内存泄露的完整内存分配调用堆栈。1、下载Visual Leak Detector安装,在vs中指定头文件和静态库。运行程序记得拷贝动转载 2013-07-31 22:47:57 · 1438 阅读 · 0 评论 -
C++ delete与delete[]异常
原则上是,new与delete,new []与delete []分别配对使用。但有时调试时会抛出异常,于是测试了一下得出如下结论:1、对于内置对象,如int,float等,不管new与new [],后面使用delete或delete []都不会抛出异常,即资源未被泄露;2、对于类对象,包含自定义类、内置类(如string等),必须按照原则要求配对使用,否则会抛出异常。原创 2013-08-04 23:39:31 · 3917 阅读 · 0 评论 -
C++ Primer学习笔记(一):第1、2章
C++ 中,把负值赋给 unsigned 对象是完全合法的,其结果是该负数对该类型的取值个数求模后的值。所以,如果把 -1 赋给8 位的 unsigned char,那么结果是 255,因为 255 是 -1 对256 求模后的值。 对于实际的程序来说,float 类型精度通常是不够的——float 型只能保证 6 位有效数字,而 double 型至少可以保证 10 位原创 2013-08-12 22:03:12 · 796 阅读 · 0 评论 -
C++ Primer学习笔记(二):第3、4、5、6章
关键概念:安全的泛型编程习惯于 C 或 Java 编程的 C++ 程序员可能会觉得难以理解,for 循环的判断条件用 != 而不是用 < 来测试 vector 下标值是否越界。C 程序员难以理解的还有,上例中没有在 for 循环之前就调用 size 成员函数并保存其返回的值,而是在 for 语句头中调用 size 成员函数。C++ 程序员习惯于优先选用 != 而不是 < 来编写循环判断条件。在原创 2013-08-12 23:02:29 · 958 阅读 · 0 评论 -
C++ Primer学习笔记(三):第7章
三类特殊的函数:内联函数、类成员函数、重载函数从 C 语言背景转到 C++ 的程序员习惯通过传递指针来实现对实参的访问。在 C++ 中,使用引用形参则更安全和更自然。如果使用引用形参的唯一目的是避免复制实参,则应将形参定义为 const 引用。应该将不需要修改的引用形参定义为 const 引用。普通的非 const 引用形参在使用时不太灵活。这样的形参既不能用原创 2013-08-12 23:03:46 · 795 阅读 · 0 评论 -
回调函数中调用类中的非静态成员变量或非静态成员函数
回调函数中调用类中的非静态成员变量或非静态成员函数【问题】如何在类中封装回调函数?a.回调函数只能是全局的或是静态的;b.全局函数会破坏类的封装性,故不予采用;c.静态函数只能访问类的静态成员,不能访问类中非静态成员。 1. 如何让静态函数访问类的非静态成员。 a.声明一静态函数a(),将类实例对象指针做为参数传入。如:class A(){ static v转载 2013-08-12 23:33:59 · 1110 阅读 · 0 评论 -
时间在编程中的定义级相关类型介绍
Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。Unix时间戳不仅被使用在Unix 系统、类Unix系统中,也在许多其他操作系统中被广泛采用。 目前相当一部分操作系统使用32位二进制数字表示时间。此类系统的Uni转载 2013-08-12 23:48:45 · 1105 阅读 · 0 评论 -
<C++沉思录>学习笔记
第一篇 动机 讲述C++什麽地方吸引了作者,和作者为什麽要在编程中使用C++。 一开始,作者就提出了C++本质——抽象和封装:类。 抽象可以帮助设计者可以有所侧重,C++使我们更容易把程序看作抽象的集合,同时也隐藏了那些用户无须关心的抽象工作细节。封装则是C++可以把问题精心划分为分割良好的模块,使得模块与模块之间的信息得到很好的隐藏。模块化不完全同于C中也能实现模块化的函数,书中P原创 2013-08-12 23:55:25 · 876 阅读 · 0 评论 -
学习C++实践者的方法
C++的复杂性有两种分类办法:1)分为非本质复杂性和本质复杂性)其中非本质复杂性分为缺陷和陷阱两类;2)分类办法是按照场景分类:库开发场景下的复杂性和日常编码的复杂性.从事日常编码的实践者的角度来说,采用后一种分类可以让我们迅速掌握80%场景下的复杂性.建议1:有辨别力地阅读(包括那些被广泛称为“经典”的)C++书籍.建议2:养成随时查阅资料和文档的习惯.建议3:C原创 2013-08-12 21:17:22 · 1068 阅读 · 0 评论 -
如何快速封装简练的C++类
1.依照C语言风格写单个功能模块函数,数据用全局变量传递2.测试功能是否正常,资源时候泄露3.上述函数为成员函数,全局变量为成员变量封装成类4.依照C++的基本原则处理接口的封装,数据的隐藏5.添加线程安全6.如果功能涉及范围较广,可以抽象出基类,使用派生7.集成到项目代码中,如有需要做跨平台处理原创 2013-08-12 21:28:08 · 1402 阅读 · 0 评论 -
C++二进制查找
// 二进制查找int BinaryFind(const unsigned char * Dest, int DestLen, const unsigned * Src, int SrcLen) { int j = 0; for (int i=0; i<DestLen; i++) { for (j=0; j<SrcLen; j++) if (Des原创 2013-10-31 10:43:31 · 2652 阅读 · 0 评论 -
C++里用类重载数据类型模板
templateclass CBaseType{public: CBaseType() : pType(NULL) { } CBaseType(CBaseType * pBaseType) { pType = pBaseType->pType; } CBaseType * operator=(CBaseType * pBaseType) { pType = p原创 2013-11-15 17:01:54 · 1017 阅读 · 0 评论 -
可变参数的原理和多级调用
#include #include #include #include #define LOG_BUFF_SIZE 1024char szLogBuff[LOG_BUFF_SIZE] = {0};void LogTest(const char *format, ...){ va_list arg_ptr; va_start(arg_ptr, format); int nA原创 2013-11-21 10:16:34 · 1613 阅读 · 0 评论 -
C++编写的DLL与第三方通信中回调函数的巧妙使用
/* CallBackDll.cpp 2012年11月6日 23:34:20 */#include #include #include // 不同对象之间通信的结构体typedef struct _tagMyStruct{ INT nCount; TCHAR szBuff[MAX_PATH];}MyStruct, *LPMyStruct;// 回调函数原型typedef原创 2013-04-28 15:17:11 · 7301 阅读 · 0 评论