跟踪类

来源:互联网 发布:重庆大学数据图书馆 编辑:程序博客网 时间:2024/05/24 03:21
#ifndef _TRACE_H_#define _TRACE_H_#include <iostream>#include <string>using namespace std;/*设计一个跟踪类首先这个类只要有一个string的成员变量就可以了;其次它的构造函数含简单,默认就行;它会有两个成员函数enter()、leave()来表示进入和离开某个地方然后为这个类生产一个全局对象、这样只需要包含头文件,就可以直接使用了。。。。但是当我们离开一个作用域的时候确需要,频繁的书写leave()函数,而这肯定会不高效。因此我们设计类的构造函数为enter()函数,类的析构函数为leave()函数,这样只要作用域都会调用leave()函数。*/class trace{public:    static bool is_open;    trace(const char* s) :m_msg(s){        if (is_open)            cout << "enter " << m_msg << endl;    }    ~trace(){        if (is_open)            cout << "leave " << m_msg << endl;    }    void debug(const char* msg){        if (is_open)            cout << "msg" << endl;    }private:    const char* m_msg;};bool trace::is_open = false;class Trace{public:    Trace(const char* s) :m_msg(s){#ifdef _TRACE_DEBUG            cout << "enter " << m_msg << endl;#endif _TRACE_DEBUG    }    ~Trace(){#ifdef _TRACE_DEBUG            cout << "leave " << m_msg << endl;#endif _TRACE_DEBUG    }    void debug(const char* msg){#ifdef _TRACE_DEBUG            cout << "msg" << endl;#endif _TRACE_DEBUG    }private:    string m_msg;};#endif //trace.h
#include <iostream>#include <ctime>#include <fstream>#include "trace.h"using namespace std;int add(int x){    trace t("add");    return x+1;}int Add(int x){    Trace t("add");    return x + 1;}// 保存cout流缓冲区指针  //streambuf* coutBuf = cout.rdbuf();//ofstream of("out.txt");// 获取文件out.txt流缓冲区指针  //streambuf* fileBuf = of.rdbuf();// 设置cout流缓冲区指针为out.txt的流缓冲区指针  //cout.rdbuf(fileBuf);//cout << "E-mail" << "Chen@qq.com" << endl;// 恢复cout原来的流缓冲区指针  //cout.rdbuf(coutBuf);//of.close();//cout << "Write Personal Information over..." << endl;int main(){    //trace::is_open = true;    trace::is_open = false;#define _TRACE_DEBUG#undef _TRACE_DEBUG    streambuf* coutBuf = cout.rdbuf();    ofstream of("out.txt");    streambuf* fileBuf = of.rdbuf();    cout.rdbuf(fileBuf);    clock_t start_t2 = clock();    for (int i = 0; i < 10000; ++i){        int y = Add(i);    }    clock_t end_t2 = clock();    clock_t start_t = clock();    for (int i = 0; i < 10000; ++i){        int y = add(i);    }    clock_t end_t = clock();    cout.rdbuf(coutBuf);    of.close();    cout << "time = " << (end_t - start_t) << endl;    cout << "time2 = " << (end_t2 - start_t2) << endl;    system("pause");    return 0;}//测试结果显示trace比Trace速度更快。
原创粉丝点击