2010-07-06 13 views
17

Wie lege ich den Körper des statischen Konstruktors einer verwalteten Klasse außerhalb der Klassendeklaration ab? Diese Syntax scheint kompilierbar zu sein, aber bedeutet das wirklich statischen Konstruktor oder nur eine statische (= nicht sichtbare externe Übersetzungseinheit) Funktion?C++/CLI, statischer Konstruktor außerhalb der Klassendeklaration

+0

Dies könnte Ihnen helfen: http://www.drdobbs.com/184401941 – fingerprint211b

+0

Finger print211b: Das gesehen. Dieser Artikel beschreibt, wie es funktioniert, aber sie erwähnen diese bestimmte Verwendung nicht. – liori

Antwort

18

Ja, das ist die richtige Syntax zum Erstellen eines statischen C++/CLI-Konstruktors. Sie können wissen, dass es keine statische Funktion erstellt, da dies keine gültige Funktionsdeklarationssyntax ist. Für Funktionen muss der Rückgabetyp angegeben werden. Außerdem würde sich der Compiler beschweren, dass Foo() kein Mitglied der Klasse Foo ist, wenn es nicht mit dem Konstruktor verknüpft ist, den Sie in der Klassendefinition deklariert haben.

Sie können die ziemlich leicht testen:

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

Dies würde Ausgabe:

Static Constructor
Constructor
Haupt

+0

Ja, danke. Ich bekam wegen dieser Syntax einen Fehler, dann bemerkte ich, dass es etwas mit einem statischen Konstruktor zu tun hatte. – liori

Verwandte Themen