简单Trace类实现
《C++沉思录》27章内容修改后所得:
/************************************************************************/
/* Trace类,以及trace类输出重定向,C++沉思录27章 */
/************************************************************************/
#pragma once
#include <iostream>
using namespace std; //打开/关闭trace输入输出流
static const int trace_debug = ; //输出流
class Channel
{
public:
Channel (ostream* o = &std::cout): trace_file(o){}
//重定向输出流
void Reset(ostream* o = &std::cout)
{
trace_file = o;
}
private:
friend class Trace;
template<class T> friend class Obj_trace;
ostream* trace_file;
};
typedef CSingleton<Channel> TraceChannel; class Trace
{
public:
Trace(const char* s,Channel* c = TraceChannel::Instance())
{
if (trace_debug)
{
name = s;
cp = c;;
if (cp && cp->trace_file)
{
*cp->trace_file << "Trace begin : " << name << endl;
}
}
}
~Trace()
{
if (trace_debug)
{
if (cp && cp->trace_file)
{
*cp->trace_file << "Trace end : " << name <<endl;
}
}
}
private:
Channel* cp;
const char* name;
}; //传递类名给Obj_trace,可以作为待跟踪类的基类或成员变量存在
template<class T>
class Obj_trace
{
public:
Obj_trace(Channel* c = TraceChannel::Instance()) : ct(++count)
{
if (trace_debug)
{
cp = c;
if (cp && cp->trace_file)
{
*cp->trace_file << "Trace obj begin : " << typeid(T).name() << " "<< ct << " constructed" << endl;
}
}
}
~Obj_trace()
{
if (trace_debug)
{
if (cp && cp->trace_file)
{
*cp->trace_file << "Trace obj end : " << typeid(T).name() << " "<< ct << " destoryed" << endl;
}
}
}
private:
Channel* cp;
const char* name;
static int count;
int ct;
}; //每个不同的type类型都有唯一对应的count
template<class T>
int Obj_trace<T>::count = ;
简单Trace类实现的更多相关文章
- System.Diagnostics命名空间里的Debug类和Trace类的用途
在 .NET 类库中有一个 System.Diagnostics 命名空间,该命名空间提供了一些与系统进程.事件日志.和性能计数器进行交互的类库.当中包括了两个对开发人员而言十分有用的类--Debug ...
- debug类和trace类的区别
在 .net 类库中有一个 system.diagnostics 命名空间,该命名空间提供了一些与系统进程.事件日志.和性能计数器进行交互的类库.当中包括了两个对开发人员而言十分有用的类——debug ...
- 基于Android 下载文件时,更新UI简单帮助类
因为在项目开发时.有这种简单需求,问谷歌,网络上也有好多Utils工具类,可是比較冗余.自己就简单的写了一个简单帮助类. /** * 下载文件,更新UI简单帮助类 * * @author jarlen ...
- Java基础_0305:简单Java类
简单Java类 简单Java类是一种在实际开发之中使用最多的类的定义形式,在简单Java类中包含有类.对象.构造方法.private封装等核心概念的使用,而对于简单Java类首先给出如下的基本开发要求 ...
- Golang简单日志类
实现简单的日志写入文件功能运行环境:golang1.4.2+win7x64golang1.4.2+centos6.5×64 package Helper import ( “fmt” “log” “o ...
- 玩转TypeScript(1) --定义简单的类
相对于JavaScript来说,TypeScript增强了强制类型,同时添加了一系列的面向对象的特性,包含:静态类型(Static typing).类(Classes).接口(Interfaces). ...
- JAVA基础学习之路(四)定义简单java类
简单java类开发一般原则: 类名称必须有意义,再怎么说,要让人家看的明白吧 类之中所有属性必须使用private封装,并提供setter,getter方法 类之中可以有多个构造方法,但是必须保留有一 ...
- java基础之JDBC三:简单工具类的提取及应用
简单工具类: public class JDBCSimpleUtils { /** * 私有构造方法 */ private JDBCSimpleUtils() { } /** * 驱动 */ publ ...
- C++_类继承1-从一个简单的类开始
面向对象编程的主要目的之一是:提供可重用的代码.尤其是项目很庞大的时候,重用测试过的代码比重新编码代码要好得多. C++提供了更高层次的重用性.其中之一就是继承这个概念. 一些厂商提供了类库.类库由类 ...
随机推荐
- ios开源东西
今天,我们将介绍20个在GitHub上非常受开发者欢迎的iOS开源项目,你准备好了吗? 1. AFNetworking 在众多iOS开源项目中,AFNetworking可以称得上是最受开发者欢迎的库项 ...
- Java核心技术1
Java方法参数的使用情况: 一个方法不能修改一个基本数据 对象析构与finalize方法 Java有自动的垃圾回收器,不需要人工回收内存,例如,文件或使用了系统资源的另一个对象的句柄.在这种情况下, ...
- JAVA源码之JDK(一)——java.lang.Object
想要深入学习JAVA,还需追本溯源,从源码学起.这是我目前的想法.如今JAVA各种开源框架涌出,很多JAVA程序员都只停留在如何熟练使用的层次.身为其中一员的我深感惭愧,所以要加快学习的脚步,开始研究 ...
- office 2010 自动连接网络打印机的问题(保存或者打开极慢) 解决方法
将默认打印机设为本地打印机或 Microsoft XPS Document Writer
- Grunt-Less批量编译为css
Grunt批量编译less module.exports = function (grunt) { grunt.initConfig({ less: { main: { expand: true, s ...
- Go语言版本的helloworld
新建一个project,然后建立一个main目录,在main目录下新建一个go类文件:main.go 内容如下: package main import "fmt" func ma ...
- 简明python教程
linux查询python版本:python -V linux进入python:python 退出python:CTRL+D 使用源文件:helloworld.py 运行这个程序:python hel ...
- tarball源码安装
软件最原始的安装方法 用tarball来安装升级make命令执行make ,会在当前路径下搜索makefile这个文本文件,这个文件中记录了源码如何编译的详细信息.软件开发商通常会写一个检测程序,检测 ...
- MiniUI级联
OnCellCommitEdit: function (e) { var grid = e.sender; var record = e.record; ...
- Oracle 在64位机器上使用plSQL连接Oracle的问题(SQL*Net not properly installed)
问题: 在64位机器上了64位的oracle客户端. 然后装上PL/SQL Developer,但是连接oracle老报这个错: Initialization error SQL*Net n ...