枚举所有T的所有SomeClass的对象

我有Event<T>类的事件处理,其中T是签名的仿函数类型void (*)()或某些基于类的封闭)。

在下面省略拷贝构造函数的代码构造的对象映射events

template <class T> class Event { ... T action; long explode; static map<string, Event> events; ... void shot() { action(); } ... static void check() { // foreach pair in events if (itsATimeFor(pair->second.explode)) pair->second.shot(); } };

check()如果任何事件有火在其孔功能测试和拍摄上的成功。

当前实现有一些重大缺陷:它测试只有一种类型的每个呼叫的事件,因此也没用

问题是,如何枚举所有实例的所有事件Event<T>类?

--------------解决方案-------------

我想你需要一个共同的基类,这意味着您可以将所有这些东西存放收藏。 要做到这一点,你必须摆脱static的东西,但我不认为这是一个问题,真的。

class IEvent
{
public:
virtual ~IEvent() = 0 { };
virtual void check() = 0;
}; // eo interface IEvent

template<class T>
class Event : public IEvent
{
public:
virtual ~Event()
{
}; // eo dtor

void check()
{
};
}; // eo class Event

现在,您可以实例化事件类,只要你想,把他们集中。 有了这样的,你可以列举出来,并调用check()上的每个实例。 我认为没有理由让你使用static这里。 我可以帮助消除这些静态如果你觉得你已经不得不把它们放在那里是有原因的。

分类:C# 时间:2015-03-14 人气:0
本文关键词: 事件,模板
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.642 (s). 10 q(s)