2010-07-06 7 views
17

¿Cómo pongo el cuerpo del constructor estático de una clase gestionada fuera de la declaración de clase? Esta sintaxis parece ser compilable, pero ¿significa realmente constructor estático, o simplemente una función estática (= unidad de traducción externa no visible)?C++/CLI, constructor estático fuera de la declaración de clase

ref class Foo { 
    static Foo(); 
} 

static Foo::Foo() {} 
+0

Esto podría ayudarle a: http://www.drdobbs.com/184401941 – fingerprint211b

+0

dedo print211b: visto eso. Este artículo describe cómo funciona, pero no mencionan este uso específico. – liori

Respuesta

18

Sí, esa es la sintaxis correcta para crear un constructor estático de C++/CLI. Puede saber que no está creando una función estática ya que no es una sintaxis de declaración de función válida. Las funciones deben tener el tipo de devolución especificado. Además, el compilador se quejaría de que Foo() no es miembro de la clase Foo si no estuviera vinculándolo al constructor que usted declaró en la definición de la clase.

Puede probar la relativa facilidad:

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

Esto seria:

estático Constructor
Constructor
principal

+0

Sí, gracias. Obtuve un error debido a esa sintaxis, luego noté que era por algo que no estaba relacionado con el contructor estático. – liori

Cuestiones relacionadas