Ich versuche das Programm zu erstellen, das nur dann Code ausführt, wenn das Template instanziiert wird (es wird für die Low-Level-Treiberinitialisierung verwendet). Jetzt habe ich folgende Lösung.Instantiierung der statischen Instance des Force-Templates
class Initializer
{
public:
Initializer(){
// This code is executed once
}
void silly() const{
}
};
template <class T>
class Proxy{
protected:
static const Initializer init;
};
template<class T>
const Initializer Proxy<T>::init;
template<class T>
class MyTemplate : public Proxy<void>{
public:
static void myMethod1(){
init.silly();
// ... Something useful
}
static void myMethod2(){
init.silly();
// ... Something useful
}
};
Der Initializer
Standardkonstruktors ist Fall, dass ich myMethod1()
oder myMethod2()
irgendwo rufen nur in ausgeführt.
Aber gibt es eine Möglichkeit, diese init.silly();
Linien loszuwerden?
"Instanziierung erzwingen" und "Instanziierung überprüfen" sind zwei ziemlich unterschiedliche Dinge. –
Möchten Sie 'Initializer' für jede Instantiierung von' Proxy' erstellen? Z.B. Wenn Sie 'Proxy' und 'Proxy ' erstellen, wird 'Initializer' zweimal erstellt? –
Pavel
Nein, ich möchte nur eine Instanz von 'Initialisierer' erstellen. Ich werde immer von "Proxy" erben. –
valentin