2010-07-06 12 views
17

Come si inserisce il corpo del costruttore statico di una classe gestita al di fuori della dichiarazione della classe? Questa sintassi sembra essere compilabile, ma in realtà significa costruttore statico o solo una funzione statica (= non visibile all'esterno della traduzione)?C++/CLI, costruttore statico esterno alla dichiarazione della classe

ref class Foo { 
    static Foo(); 
} 

static Foo::Foo() {} 
+0

Questo potrebbe aiutare: http://www.drdobbs.com/184401941 – fingerprint211b

+0

dito print211b: visto quello. Questo articolo descrive come funziona, ma non menzionano questo utilizzo specifico. – liori

risposta

18

Sì, questa è la sintassi corretta per creare un costruttore statico C++/CLI. È possibile sapere che non sta creando una funzione statica poiché non è una sintassi di dichiarazione di funzione valida. Le funzioni devono avere il tipo di ritorno specificato. Inoltre, il compilatore si lamenterebbe che Foo() non è un membro della classe Foo se non lo collega al costruttore dichiarato nella definizione della classe.

È possibile verificare il abbastanza facilmente:

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"); 
} 

Questo visualizzerà:

Statico Constructor
Costruttore
principale

+0

Sì, grazie. Stavo ricevendo un errore a causa di quella sintassi, poi ho notato che era a causa di qualcosa non correlato al contructor statico. – liori

Problemi correlati