C++ / CLI, статический конструктор вне объявления класса

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

ref class Foo {
    static Foo();
}

static Foo::Foo() {}
17
задан liori 6 July 2010 в 16:24
поделиться

1 ответ

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

Это будет результат:

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

18
ответ дан 30 November 2019 в 14:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: