C++ 列举所有SomeClass<;T>;所有T的对象
我有事件句柄的C++ 列举所有SomeClass<;T>;所有T的对象,c++,events,templates,C++,Events,Templates,我有事件句柄的Event类,其中T是签名的函子类型void(*)((或一些基于类的闭包) 在下面的代码中,复制构造的对象以映射事件 template <class T> class Event { ... T action; long explode; static map<string, Event> events; ... void shot() { action(); } ...
Event
类,其中T
是签名的函子类型void(*)(
(或一些基于类的闭包)
在下面的代码中,复制构造的对象以映射事件
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();
}
};
模板
班级活动
{
...
T作用;
长时间爆炸;
静态地图事件;
...
无效射击()
{
动作();
}
...
静态无效检查()
{
//事件中的每一对
if(itsATimeFor(配对->秒分解))
配对->第二个.shot();
}
};
check()
函数测试是否有任何事件在其孔中开火并成功射击
当前的实现有一些主要的错误:它只测试每个调用的一种类型的事件,因此是无用的
问题是,如何从所有实例化的
事件类中枚举所有事件?我认为您需要一个公共基类,这意味着您可以将所有这些内容存储在一个集合中。要做到这一点,您必须摆脱静态的东西,但我并不认为这是一个真正的问题
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
类事件
{
公众:
virtual~IEvent()=0{};
虚空检查()=0;
}; // eo接口事件
模板
类事件:公共事件
{
公众:
虚拟事件()
{
};//eo dtor
无效检查()
{
};
}; // eo级活动
现在,您可以根据需要实例化事件类并将它们放入集合中。这样,您就可以枚举它们并对每个实例调用check()
。我看你没有理由在这里使用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
类事件
{
公众:
virtual~IEvent()=0{};
虚空检查()=0;
}; // eo接口事件
模板
类事件:公共事件
{
公众:
虚拟事件()
{
};//eo dtor
无效检查()
{
};
}; // eo级活动
现在,您可以根据需要实例化事件类并将它们放入集合中。这样,您就可以枚举它们并对每个实例调用check()
。我看你没有理由在这里使用static
。如果您觉得有必要将这些静态设置放在那里,我可以帮助您删除它们。您似乎正在构建自己的事件处理系统。您是否考虑过使用?似乎您正在构建自己的事件处理系统。你考虑过使用吗?我已经按照你写的那样做了。我更喜欢在这里使用集合,因此在我的版本库中,ctor是抽象的,将它包括在集合和dtor中,当然还有虚拟void shot()=0
和静态void pullTheTrigger()
。我现在已经像你写的那样做了。我更喜欢在这里使用集合,因此在我的版本库中,ctor是抽象的,将其包含在集合和数据中,或者排除,当然还有虚拟void shot()=0
和静态void pullTheTrigger()
。