跟踪自己的类
//输出重定向
class Channel
{
public:
Channel(ostream* os = &cout) : Trace_File(os) { }
void Reset(ostream *os) { Trace_File = os;}
private:
friend class Trace;
ostream* Trace_File;
};
通过重定向实现
class Trace
{
public:
Trace(const char *s, Channel *c) : m_name(s), m_cp(c)
{
if (m_cp->Trace_File)
*m_cp->Trace_File<<"begin"<<m_name<<endl;
}
~Trace()
{
if (m_cp->Trace_File)
*m_cp->Trace_File<<"end"<<m_name<<endl;
}
private:
Channel *m_cp;
const char* m_name;
};
//创建死代码
//背景:测试类的一个潜在问题,即使关闭了输出,
//测试trace_file时进入和退出每个函数都要耗费时间和空间。
//创建死代码的话,可以在不必重写用户代码的前提下免除几乎所有代码生成的开销
static const int debug = 0;
class Trace
{
public:
Trace(const char *s, Channel *c) : m_name(s), m_cp(c)
{
if (m_cp->Trace_File)
*m_cp->Trace_File<<"begin"<<m_name<<endl;
}
~Trace()
{
if (m_cp->Trace_File)
*m_cp->Trace_File<<"end"<<m_name<<endl;
}
private:
Channel *m_cp;
const char* m_name;
};