2010-07-06 4 views
17

Как разместить тело статического конструктора объявленного класса вне класса? Этот синтаксис представляется компилируемым, но действительно ли это означает статический конструктор или просто статическую (= не видимая внешнюю функцию перевода)?C++/CLI, статический конструктор вне объявления класса

ref class Foo { 
    static Foo(); 
} 

static Foo::Foo() {} 
+0

Это может помочь вам: HTTP://www.drdobbs.com/184401941 – fingerprint211b

+0

палец принт211b: видел это. В этой статье описывается, как это работает, но они не упоминают об этом конкретном использовании. – liori

ответ

18

Да, это правильный синтаксис для создания статического конструктора C++/CLI. Вы можете знать, что он не создает статическую функцию, поскольку это не является допустимым синтаксисом объявления функции. Функции должны иметь указанный тип возврата. Кроме того, компилятор будет жаловаться, что Foo() не является членом класса Foo, если он не связывает его с конструктором, который вы указали в определении класса.

Вы можете протестировать довольно легко:

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

Это выведет:

Статический конструктор
Конструктор
Главная

+0

Да, спасибо. Я получил ошибку из-за этого синтаксиса, тогда я заметил, что это было из-за чего-то, не связанного с статическим contructor. – liori

Смежные вопросы