《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类实现的更多相关文章

  1. System.Diagnostics命名空间里的Debug类和Trace类的用途

    在 .NET 类库中有一个 System.Diagnostics 命名空间,该命名空间提供了一些与系统进程.事件日志.和性能计数器进行交互的类库.当中包括了两个对开发人员而言十分有用的类--Debug ...

  2. debug类和trace类的区别

    在 .net 类库中有一个 system.diagnostics 命名空间,该命名空间提供了一些与系统进程.事件日志.和性能计数器进行交互的类库.当中包括了两个对开发人员而言十分有用的类——debug ...

  3. 基于Android 下载文件时,更新UI简单帮助类

    因为在项目开发时.有这种简单需求,问谷歌,网络上也有好多Utils工具类,可是比較冗余.自己就简单的写了一个简单帮助类. /** * 下载文件,更新UI简单帮助类 * * @author jarlen ...

  4. Java基础_0305:简单Java类

    简单Java类 简单Java类是一种在实际开发之中使用最多的类的定义形式,在简单Java类中包含有类.对象.构造方法.private封装等核心概念的使用,而对于简单Java类首先给出如下的基本开发要求 ...

  5. Golang简单日志类

    实现简单的日志写入文件功能运行环境:golang1.4.2+win7x64golang1.4.2+centos6.5×64 package Helper import ( “fmt” “log” “o ...

  6. 玩转TypeScript(1) --定义简单的类

    相对于JavaScript来说,TypeScript增强了强制类型,同时添加了一系列的面向对象的特性,包含:静态类型(Static typing).类(Classes).接口(Interfaces). ...

  7. JAVA基础学习之路(四)定义简单java类

    简单java类开发一般原则: 类名称必须有意义,再怎么说,要让人家看的明白吧 类之中所有属性必须使用private封装,并提供setter,getter方法 类之中可以有多个构造方法,但是必须保留有一 ...

  8. java基础之JDBC三:简单工具类的提取及应用

    简单工具类: public class JDBCSimpleUtils { /** * 私有构造方法 */ private JDBCSimpleUtils() { } /** * 驱动 */ publ ...

  9. C++_类继承1-从一个简单的类开始

    面向对象编程的主要目的之一是:提供可重用的代码.尤其是项目很庞大的时候,重用测试过的代码比重新编码代码要好得多. C++提供了更高层次的重用性.其中之一就是继承这个概念. 一些厂商提供了类库.类库由类 ...

随机推荐

  1. Outlook自动回复功能无法使用

    Outlook2010      http://support.microsoft.com/viewkb/viewkb.aspx?contentid=2596516 Outlook2007       ...

  2. 第15章—数据库连接池(DBCP2)

    spring boot 系列学习记录:http://www.cnblogs.com/jinxiaohang/p/8111057.html 码云源码地址:https://gitee.com/jinxia ...

  3. C#生成Windows服务

    1. 新建一个项目,或者从选择当前解决方案--右键-添加--新建项目 2. 选择Visual C#项目-->Windows 服务,填写要创建的服务名称(修改默认的WindowService1成为 ...

  4. PHP去除所有的空格

    1.去除两边的空格 trim($arr) 2.正则匹配去除所有的空格 preg_replace('# #','',$goodid)

  5. Hibernate简单配置

    1.配置构建路径,加载用户库,hibernate4.3.8 MySQL-Driver 2.写User.java      纯POJO+持久化注解=PO @Entity @Table(name=&quo ...

  6. Tomcat WEB站点部署

    上线的代码有两种方式, 第一种方式是直接将程序目录放在webapps目录下面 第二种方式是使用开发工具将程序打包成war包,然后上传到webapps目录下面.下面让我们见识一下这种方式 这个网站里面已 ...

  7. 17届计算机应届生秋季校招分享 to Tomorrow

    首先自我介绍一下,本人来自普通二本院校,计算机科学与技术专业,在校有一到两年asp.net项目经验,花了两个星期左右的时间转向java.现将此次的求职经历,分为三阶段,分享给大家. First Sta ...

  8. day3-python的函数及参数

    函数式编程最重要的是增强代码的重用性和可读性 1 2 3 4 def 函数名(参数):     ...     函数体     ... 函数的定义主要有如下要点: def:表示函数的关键字 函数名:函 ...

  9. LeetCode:二叉树的前序遍历【144】

    LeetCode:二叉树的前序遍历[144] 题目描述 给定一个二叉树,返回它的 前序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3] 题目分析 如果用递 ...

  10. linux 查看tomcat 日志

    tomcat 重启: cd /opt/appserver/apache-tomcat-/bin ./shutdown.sh -ef|grep tomcat kill - ./startup.sh 查看 ...