C ++ / CLI, статический конструктор вне объявления класса - PullRequest
17 голосов
/ 06 июля 2010

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

ref class Foo {
    static Foo();
}

static Foo::Foo() {}

1 Ответ

18 голосов
/ 06 июля 2010

Да, это правильный синтаксис для создания статического конструктора 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");
}

Это выдает:

Статический конструктор
Конструктор
Main

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...