设为首页 加入收藏

TOP

在VC6里把偏特化后的模板类(或者整个模板类族)声明为另一个类的友元的方法
2014-11-23 21:25:05 】 浏览:476
Tags:VC6 后的 模板 或者 整个 声明 一个 元的 方法

/********************************************************************

file name : CLK.h

author : Clark/陈泽丹

created : 2011-11-10

purpose : 时间触发器

(把一个偏特化的模板类声明为另一个类的友元, 折腾了哥一个下午才想到-_-!)

注意不可采用

friend class CreateTrig;

而是用

friend typename CreateTrig;

(解决了has already been instantiated from the primary template问题)

*********************************************************************/

#ifndef __TIMER_TRIG_H__

#define __TIMER_TRIG_H__

#include "..\\Trigger.h"

#include "..\\..\\CLK.h"

template<>

class CreateTrig

{

public:

BOOL operator()(CTrigger* pCTrigger, STimerTrig* pDate);

};

class TimerTrig: public CTrigger ,public ITimerSink

{

public:

TimerTrig(){ m_Test = 7; }

virtual ~TimerTrig(){}

//创建触发器实例

template

BOOL Create(T* pDate)

{

CreateTrig createTrig;

return createTrig(this, pDate);

}

//触发器触发时

virtual void OnTrigger(){}

//释放释放触发器

virtual void Release();

private:

// 定时器回调

virtual void OnTimer(DWORD dwTimerID){}

friend typename CreateTrig;

int m_Test;

};

#endif //__TIMER_TRIG_H__

template<>

BOOL CreateTrig::operator()(CTrigger* pCTrigger, STimerTrig* pDate)

{

CLK::Trace trace("STimerTrig类型!");

TimerTrig* pTimerTrig = (TimerTrig*)pCTrigger;

int k = pTimerTrig->m_Test;

return TRUE;

}

//补充: 整个模板类的族作为友元-----------------------------

template

class TimerTrig: public CTrigger ,public ITimerSink

{

public:

TimerTrig(){ m_test = 7;}

virtual ~TimerTrig(){}

//触发器触发时

virtual void OnTrigger(){}

private:

// 定时器回调

virtual void OnTimer(DWORD dwTimerID){}

friend typename CreateTrig;

int m_test;

};

摘自 xiaodan007的专栏

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇以关键代码段为例子详细讲解多线.. 下一篇vc++软件框架设计之函数指针

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目