ring any_lexical_cast<std::string, bool>(const bool& src, const std::string&);
template<>
std::wstring any_lexical_cast<std::wstring, bool>(const bool& src, const std::wstring&);
具体实现请参看源码。
五、CSelfPath
日志初始化接口通常需要提供一个路径参数,以指定日志存放路径。我为其增加了一个默认路径:当传递空字符串时,将日志文件放在应用程序所在路径的log目录下,若log目录不存在,则先创建。
获取应用程序所在路径本可以放在日志模块内部,但考虑到别的地方可能也会用到,而且应用程序一旦启动,路径就不会变,所以就做成了一个单例类CSelfPath。
CSelfPath仅在构造函数中调用GetModuleFileNameA一次获取路径并分割成目录、文件名等等部分。
六、CLoggerImpl与Logger
日志的实现类里边有好多东西我都不想给调用者看到,典型如private的成员;还有日志实现类的接口并不易用。所以我在日志实现类和调用者之间又引入了一个间接层Logger,它的主要作用就是隐藏日志实现类和使接口更“亲民”。当然除了这个我还给了它一些别的功能:控制日志输出级别。Logger并不是一个类。
七、Disable 3rd party library warning
我在使用boost关于string的algorithm的时候,发现编译器会大段的警告,这来自boost库中对std::copy的使用,而我明确的知道boost库的这段代码是正确的。这些警告又多又烦人,有没有安全的办法消除这个警告?
肯定有了:
#pragma warning(push)
#pragma warning(disable:4996)
#include <boost/algorithm/string.hpp>
#pragma warning(pop)
上面的代码保存为一个头文件:boost_algorithm_string.h。以后要包含boost/algorithm/string.hpp时,均以boost_algorithm_string.h代替。
源码:https://git.oschina.net/mkdym/DaemonSvc.git (主)&& https://github.com/mkdym/DaemonSvc.git (提升逼格用的)。
2015年11月1日星期日
|