point.hxx
1、mutale关键字
2、智能指针 SharedObject
3、assert
assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:
#include <assert.h>
void assert( int expression );
assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,
然后通过调用 abort 来终止程序运行。
4、static_cast
>>显式类型转换
被称为“强制类型转换”(cast)
C 风格: (type-id)
C++风格: static_cast、dynamic_cast、reinterpret_cast、和const_cast..
关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++ 的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。下面对它们一一进行介绍。
用法:static_cast < type-id > ( expression )
说明:该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。
任何想要使用智能指针的类必须要继承SharedObject类,而该类负责记录该对象被引用的次数,当该对象的引用次数为0时,就会delete该对象。
tstring.h
1、# define LOG4CPLUS_TEXT2(STRING) L##STRING
C语言宏定义时#(井号)和##(双井号)的用法
#在英语里面叫做 pound
在C语言的宏定义中,一个#表示字符串化;两个#代表concatenate
2、UNICODE
到底什么是ANSI,什么是UNICODE呢?其实这是两种不同的编码方式标准,ANSI中的字符采用8bit,而UNICODE中的字符采用16bit。8bit的ANSI编码只能表示256种字符,表示26个英文字母是绰绰有余的,但是表示汉字,韩国语,日语等有着成千上万个字符的非西方字符肯定就不够了,正是如此才引入了UNICODE标准。
1、PIMPL
http://blog.youkuaiyun.com/ma12an/article/details/7491893
pimpl 用法背后的思想是把客户与所有关于类的私有部分的知识隔离开。由于客户是依赖于类的头文件的,头文件中的任何变化都会影响客户,即使仅是对私有节或保护节的修改。pimpl用法隐藏了这些细节,方法是将私有数据和函数放入一个单独的类中,并保存在一个实现文件中,然后在头文件中对这个类进行前向声明并保存一个指向该实现类的指针。类的构造函数分配这个pimpl类,而析构函数则释放它。这样可以消除头文件与实现细节的相关性。
Loglog.h
This class used to output log statements from within the log4cplus package.
Loglog类用于输出日志。
Property.h
解析配置文件,并按行将配置保存为map形式:
typedef std::map<log4cplus::tstring, log4cplus::tstring> StringMap;
_str();
const char *c_str();
c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同.
这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。
log4cplus::tistream& input
typedef LOG4CPLUS_STREAM_NAMESPACE::istream tistream;
const log4cplus::tstring& inputFile
根据是否使用了UNICODE,决定使用std::string还是std::wstring