2010-07-06 6 views
17

Comment mettre le corps du constructeur statique d'une classe managée en dehors de la déclaration de classe? Cette syntaxe semble être compilable, mais cela signifie-t-il vraiment un constructeur statique, ou simplement une fonction statique (= non visible en dehors de l'unité de traduction)?C++/CLI, constructeur statique en dehors de la déclaration de classe

ref class Foo { 
    static Foo(); 
} 

static Foo::Foo() {} 
+0

Cela pourrait vous aider: http://www.drdobbs.com/184401941 – fingerprint211b

+0

doigt print211b: vu ça. Cet article décrit comment cela fonctionne, mais ils ne mentionnent pas cet usage spécifique. – liori

Répondre

18

Oui, c'est la syntaxe correcte pour créer un constructeur statique C++/CLI. Vous pouvez savoir qu'il ne crée pas de fonction statique car il ne s'agit pas d'une syntaxe de déclaration de fonction valide. Les fonctions doivent avoir le type de retour spécifié. En outre, le compilateur se plaindrait que Foo() n'est pas membre de la classe Foo s'il ne le liait pas au constructeur que vous avez déclaré dans la définition de classe.

Vous pouvez tester la assez facilement:

using namespace System; 

ref class Foo { 
    static Foo(); 
    Foo(); 
} 

static Foo::Foo() { Console.WriteLine("Static Constructor"); } 
Foo::Foo() { Console.WriteLine("Constructor"); } 

int main(array<System::String ^> ^args) 
{ 
    Foo ^f = gcnew Foo(); 
    Console.WriteLine("Main"); 
} 

Cette génèrerait:

Constructor statique
Constructeur
principal

+0

Oui, merci. Je recevais une erreur à cause de cette syntaxe, puis j'ai remarqué que c'était à cause de quelque chose sans rapport avec le contructeur statique. – liori

Questions connexes