简单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++提供了更高层次的重用性.其中之一就是继承这个概念. 一些厂商提供了类库.类库由类 ...
随机推荐
- JavaScript-烂笔头
JavaScript 对大小写敏感 注释单行用:// 注释多汗用:/* */ 声明变量:var 变量名 (未使用值来声明的变量,值为undefined) JavaScript 变量均为对象 可以使用关 ...
- 轻松理解MYSQL MVCC 实现机制
轻松理解MYSQL MVCC 实现机制 转载https://blog.csdn.net/whoamiyang/article/details/51901888 1. MVCC简介 1.1 什么是MVC ...
- 我的Android进阶之旅------>Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题
Android 设备的CPU类型通常称为ABIs 问题描述 解决方法 1解决之前的截图 2解决后的截图 3解决方法 4建议 为什么你需要重点关注so文件 App中可能出错的地方 其他地方也可能出错 使 ...
- docker的安装以及jdk和tomcat的环境配置
准备工作:需要Linux kernel 3.8支持查看linux内核的版本:root@ubuntu-dev:~# cat /proc/version查看linux版本:root@ubuntu-dev: ...
- 爬虫任务二:爬取(用到htmlunit和jsoup)通过百度搜索引擎关键字搜取到的新闻标题和url,并保存在本地文件中(主体借鉴了网上的资料)
采用maven工程,免着到处找依赖jar包 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&quo ...
- Java IO流简单使用
Java IO流简单使用 也许是以前IO方面接触的比较少,我对于读和写的概念老是混淆. 趁着现在实习比较闲小结一下,我个人理解读和写都是针对程序,分别就是程序的输入和输出,或者叫读入写出. Java ...
- ssh远程执行远程执行命令
ssh zxrac1 '/home/oracle/tmp/t5.sh 2 2 >/dev/null 2>&1 &'
- python16_day05【迭代器、生成器、模块】
一.列表生成式 1.我现在有个需求,看列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],我要求你把列表里的每个值加1,你怎么实现?你可能会想到2种方式 : >>> a ...
- 解释一下python中的赋值运算符
我们将所有的算术运算符和赋值运算符号放在一起展示 a=7 a+=1 print(a) a-=1 print(a) a*=2 print(a) a/=2 print(a) a**=2 print(a) ...
- ReportView显示本地报表
from:http://www.cnblogs.com/duanshuiliu/archive/2012/07/13/2589862.html 使用ReportView控件可以显示远端Report s ...