当我第一次看到使用一个字符串描述类型来创建对象时觉得很稀奇,我在猜想,是不是内部使用超多的case,通过判断字符串来创建对应的对象。但是这样的情况是静态的,所有的字符串都已经被预置了,当有一个新的类型出现,那么怎么又神奇的扩展了呢?伪代码如下:Animal *dog = Animal::Create (“Dog”); // 使用字符串创建Dog类型的Animal实例。Animal *cat = Animal::Create(“Cat”); // 同上 如果Animal::Create不能修改,那么怎么让它能够创建Fish类型的Animal呢?所有的这...
一个人会一门语言不难,难的是会玩出花样,这就是技巧,当然玩的人多了这些技巧也就不怎么稀奇了,哈。
我就先说说一个叫“引用计数”的东西。顾名思义,就是记录一个对象被引用了几次。那么它的出发点是什么,这可能需要一个场景来描述。假设你有一个叫A的对象,在T1线程中被创建,之后可能会在T2线程或者T3线程中被使用。当然对象A是线程安全的,可以再任何线程中被安全使用,但问题是对象A该由谁来销毁?假如说T1和T2已经不需要使用对象A了,它们想留给T3线程来销毁,因为T3线程可能还在使用。这都是假设,反过来T3线程可能也不需要使用对象A了,那么它怎么知道T1和T2线程也不...
Jinlog是我对Log4cplus进行仿制的一个项目,现在我说说我的LogLevel实现方案。
在log4cplus中LogLevel实际上是int类型的别名,并且定义了一些常用的日志级别。按照日志事件程度,最低的日志级别为TRACE_LOG_LEVEL,意味着这是追踪式的日志,会有频繁的日志事件。最高的日志级别为FATAL_LOG_LEVEL,意味着这是非常严重的日志,基本上该日志事件在人品很差的情况下出现。另外还有开关式的日志级别,不作为日志事件来使用,那就是OFF_LOG_LEVEL和NOT_SET_LOG_LEVEL。所有这些日志级别都有一个常量值,比如OFF_LOG_...
在一个夜黑风高的深夜,我发现我的程序少了一样东西,一个用来记录程序运行过程和状态的东西。呃,是日志系统。所以我去网上搜索了一番,发现有好多开源的日志系统:log4cplus、log4C、log4cxx等等。经过比较我觉得log4cplus比较符合我的口味,因此下载了log4cplus的源代码。
对刚入手的log4cplus一筹莫展,据网上的教程说log4cplus具有以下几个元素:hierarchy、appender、logger、layout、filter、loglevel和loglog等等。另外log4cplus支持读取配置文件来动态创建各个元素。这的却很诱人,但是网上的...