Собственно вот мое видение решения:
template
class wInstancer
{
protected:
static std::listm_instances;
public:
wInstancer(void)
{
m_instances.push_back(static_cast(this));
}
wInstancer(const wInstancer&)
{
m_instances.push_back(static_cast(this));
}
wInstancer(bool) {} //do nothing
//iterator interface
typedef typename std::list::const_iterator iterator;
static iterator begin(void)
{
return m_instances.begin();
}
static iterator end(void)
{
return m_instances.end();
}
//destructor
virtual ~wInstancer(void)
{
m_instances.remove(static_cast(this));
}
};
template
std::listwInstancer ::m_instances;
Пользовать так:
...
class SomeThing: public Parent, public wInstancer
...
...
wInstancer::const_iterator it = wInstancer ::begin();
for(; it != wInstancer::end(); ++it)
{
it->method();
}
Комментариев нет:
Отправить комментарий