muhkuh_rs
2006-02-14, 10:23:24
Hi,
folgendes Problem:
#include <list>
typedef void (*registerfunc)();
class CMgr
{
public:
static std::list<registerfunc> & GetRegisterList()
{
static std::list<registerfunc> registerlist;
return registerlist;
}
static bool Register(registerfunc func)
{
GetRegisterList().push_back(func);
return true;
}
};
template< class T> class THelper
{
public:
//virtual bool GetDummy() { return ms_bDummy; }
private:
static bool ms_bDummy;
};
template <class T>
bool THelper<T>::ms_bDummy=CMgr::Register(T::Register);
class CTest : public THelper<CTest>
{
public:
static void Register()
{
printf("Registering CTest\n");
}
};
Der Sinn des Ganzen soll irgendwann sein, bestimmte statische Funktionen von Klassen automatisch zu registrieren.
Das Problem dabei ist, dass der Compiler den statischen Member ms_bDummy nicht anlegt, vermutlich weil er der Meinung ist, dass er nicht gebraucht wird. Das ist ja so auch richtig, nur ist eben der ausgeführte code bei der Initialisierung von dummy das, worauf es mir ankommt. Ob das so glücklich gelöst ist, sei mal dahingestellt aber darf mir der Compiler das denn so einfach wegoptimieren? Das macht der MS Compiler von visual C++ 7.1 bei mir schon ohne dass Optimierungen an sind. Deswegen vermute ich, dass ich irgendwas übersehen habe. Wenn man den Kommentar vor GetDummy() entfernt, dann wird ms_bDummy angelegt. Wenn man dann noch Optimierungen einschaltet aber auch wieder nicht mehr.
Edit:
Typos, code berichtigt.
folgendes Problem:
#include <list>
typedef void (*registerfunc)();
class CMgr
{
public:
static std::list<registerfunc> & GetRegisterList()
{
static std::list<registerfunc> registerlist;
return registerlist;
}
static bool Register(registerfunc func)
{
GetRegisterList().push_back(func);
return true;
}
};
template< class T> class THelper
{
public:
//virtual bool GetDummy() { return ms_bDummy; }
private:
static bool ms_bDummy;
};
template <class T>
bool THelper<T>::ms_bDummy=CMgr::Register(T::Register);
class CTest : public THelper<CTest>
{
public:
static void Register()
{
printf("Registering CTest\n");
}
};
Der Sinn des Ganzen soll irgendwann sein, bestimmte statische Funktionen von Klassen automatisch zu registrieren.
Das Problem dabei ist, dass der Compiler den statischen Member ms_bDummy nicht anlegt, vermutlich weil er der Meinung ist, dass er nicht gebraucht wird. Das ist ja so auch richtig, nur ist eben der ausgeführte code bei der Initialisierung von dummy das, worauf es mir ankommt. Ob das so glücklich gelöst ist, sei mal dahingestellt aber darf mir der Compiler das denn so einfach wegoptimieren? Das macht der MS Compiler von visual C++ 7.1 bei mir schon ohne dass Optimierungen an sind. Deswegen vermute ich, dass ich irgendwas übersehen habe. Wenn man den Kommentar vor GetDummy() entfernt, dann wird ms_bDummy angelegt. Wenn man dann noch Optimierungen einschaltet aber auch wieder nicht mehr.
Edit:
Typos, code berichtigt.