Posted on 2008-02-20 17:22
vcommon 阅读(275)
评论(0) 编辑 收藏 引用
TypeList 的Dispatech 好处和坏处
1:用处不大,
编译期决定将某些event送入某些处理函数,所以限制了函数一般会用全局的函数,更适合C语言
2优点
和delegate一样,在一个总的整体控制 的模式下,使外边看结构很简洁
只需要把相应的event发给control就可以了,而且control的扩展性很强,随意增加event和相应的处理
// Dispatech
// TL为TypeList
// F<int >为实现函数的类
template<typename TL,template <int> class F,typename FUNC>
class Dispetcher
{
map<int,FUNC> m_function;
template<typename H>
void Build()
{
pair<int,FUNC> t_pair;
t_pair.first=H::Head::value;
t_pair.second=F<H::Head::value>::Update;
m_function.insert(t_pair);
Build<H::Tail>();
};
template<>
void Build<NullType>(){};
public:
Dispetcher()
{
Build<TL>();
};
FUNC GetFunc(int id)
{
map<int,FUNC>::iterator t_iterator;
t_iterator=m_function.find(id);
if (t_iterator!=m_function.end())
return t_iterator->second;
return NULL;;
};
};
typedef HRESULT (* TEST_FUNC)(long);
template<int>
class CEvent_Test
{
public:
static HRESULT Update(long param);
};
void test()
{
typedef Typelist<Int2Type<EVENT_TEST>, ::NullType> typelist_eventtest;
Dispetcher<typelist_eventtest,CEvent_Test,TEST_FUNC> disps;
}