Обзор системы типов (C++/CX)

С помощью архитектуры среда выполнения Windows можно использовать C++/WinRT, C++/CX, Visual Basic, Visual C#, Visual C# и JavaScript для записи приложений и компонентов. Они могут напрямую обращаться к API Windows и взаимодействовать с другими среда выполнения Windows приложениями и компонентами. приложения универсальная платформа Windows (UWP), написанные в C++, компилируются в машинный код, который выполняется непосредственно в ЦП. Приложения UWP, написанные на C# или Visual Basic, компилируются на промежуточный язык Майкрософт (MSIL) и выполняются в среде CLR. Приложения UWP, написанные в JavaScript, выполняются в среде выполнения JavaScript. Сами компоненты операционной системы среда выполнения Windows записываются в C++ и запускаются в качестве машинного кода. Все эти компоненты и приложения UWP взаимодействуют напрямую через двоичный интерфейс приложения среда выполнения Windows (ABI).

Чтобы включить поддержку среда выполнения Windows в современной идиоме C++, корпорация Майкрософт создала расширение языка C++/CX. C++/CX предоставляет встроенные базовые типы и реализации базовых среда выполнения Windows типов. Эти типы позволяют приложениям и компонентам C++ взаимодействовать между ABI с приложениями, написанными на других языках. Приложения C++/CX могут использовать любой тип среда выполнения Windows. Они также могут создавать классы, структуры, интерфейсы и другие пользовательские типы, которые могут использовать другие приложения и компоненты UWP. Приложение UWP, написанное в C++/CX, также может использовать обычные классы и структуры C++, если они не имеют общедоступной доступности.

Подробное рассмотрение проекции языка C++/CX и принципов его работы приведено в следующих записях блогов:

Примечание.

Хотя C++/CX по-прежнему поддерживается, мы рекомендуем использовать C++/WinRT для новых приложений и компонентов среда выполнения Windows. Он предназначен для предоставления первого класса доступа к современному API Windows. Несмотря на имя, C++/WinRT использует только стандартный C++17 без расширений. Он использует библиотеку только заголовков для реализации проекции языка C++ для среда выполнения Windows API. C++/WinRT доступна в Windows SDK начиная с версии 1803 (10.0.17134.0).

Файлы метаданных Windows (WINMD-файлы)

При компиляции приложения UWP, написанного на C++, компилятор создает исполняемый файл в машинном коде, а также создает отдельный файл метаданных Windows ,.winmd содержащий описания общедоступных среда выполнения Windows типов, которые включают классы, структуры, перечисления, интерфейсы, параметризованные интерфейсы и делегаты. Формат метаданных напоминает формат, используемый в сборках .NET Framework. В компоненте .winmd C++ файл содержит только метаданные. Исполняемый код находится в отдельном файле. Компоненты среда выполнения Windows, включенные в Состав Windows, используют это соглашение. .winmd Имя файла должно совпадать или быть префиксом корневого пространства имен в исходном коде. (Для языков платформа .NET Framework файл содержит как код, .winmd так и метаданные, как сборку платформа .NET Framework.)

Метаданные .winmd в файле представляют опубликованную поверхность кода. Опубликованные типы видны другим приложениям UWP независимо от того, на каком языке написаны другие приложения. Метаданные или опубликованный код могут содержать только типы, указанные системой типов среда выполнения Windows. Вы не можете публиковать конструкции языка C++, такие как обычные классы, массивы, шаблоны или стандартные контейнеры библиотекИ C++ (STL). Клиентское приложение JavaScript или C# не будет знать, что делать с ними.

Видимость типа или метода в метаданных зависит от применяемых к ним модификаторов доступа. Чтобы быть видимым, тип должен быть объявлен в пространстве имен и должен быть объявлен как public. publicref class Не допускается как внутренний вспомогательный тип в коде; он просто не отображается в метаданных. Даже в public ref class, не все члены обязательно видны. В следующей таблице перечислены связи между описателями доступа C++ и public ref classсреда выполнения Windows видимостью метаданных:

Опубликован в метаданных Не опубликован в метаданных
public private
protected internal
public protected private protected

Браузер объектов можно использовать для просмотра содержимого .winmd файлов. Компоненты среда выполнения Windows, включенные в Windows, находятся в Windows.winmd файле. Файл default.winmd содержит основные типы, используемые в C++/CX, и platform.winmd содержит типы из Platform пространства имен. По умолчанию эти три .winmd файла включены в каждый проект C++ для приложений UWP.

Совет

Типы в пространстве имен не отображаются в .winmdPlatform::Collections файле, так как они не открыты. Они являются частными реализациями интерфейсов, определенных в Windows::Foundation::CollectionsC++. Приложение среда выполнения Windows, написанное на JavaScript или C#, не знает, что Platform::Collections::Vector такое класс, но он может использовать Windows::Foundation::Collections::IVector. Platform::Collections Типы определены в collection.h.

система типов среда выполнения Windows в C++/CX

В следующих разделах описываются основные функции системы типов среда выполнения Windows и их поддержка в C++/CX.

Пространства имен

Все среда выполнения Windows типы должны быть объявлены в пространстве имен; сам API Windows организован по пространству имен. Файл .winmd должен иметь то же имя, что и корневое пространство имен. Например, именованный A.B.C.MyClass класс может быть создан только в том случае, если он определен в файле метаданных с A.B.winmdименем A.winmdили A.B.C.winmd. Имя библиотеки DLL не требуется для сопоставления .winmd имени файла.

Сам интерфейс API Windows был переработан как хорошо организованная библиотека классов, упорядоченная по пространствам имен. Все компоненты среда выполнения Windows объявляются в Windows.* пространствах имен.

Дополнительные сведения см. в разделе "Пространства имен" и видимость типов.

Фундаментальные типы

Среда выполнения Windows определяет следующие основные типы: UInt8, UInt16DoubleChar16BooleanInt16UInt32StringInt32Int64UInt64Singleи . C++/CX поддерживает основные числовые типы в своем пространстве имен по умолчанию как uint16, uint32, uint64int64int32float32int16, float64и .char16 Boolean и String также определены в Platform пространстве имен.

C++/CX также определяет uint8эквивалентно, что unsigned charне поддерживается в среда выполнения Windows и не может использоваться в общедоступных API.

Фундаментальный тип может быть доступен для null, упаковав его в Platform::IBox интерфейс. Дополнительные сведения см. в разделе Классы и структуры значения.

Дополнительные сведения о фундаментальных типах см. в разделе Базовые типы

Строки

Строка среда выполнения Windows — это неизменяемая последовательность 16-разрядных символов ЮНИКОДа. Строка среда выполнения Windows проецируется как Platform::String^. Этот класс предоставляет методы для создания, обработки строк, а также для их преобразования в тип wchar_tи из этого типа.

Дополнительные сведения см. в разделе Строки.

Массивы

Среда выполнения Windows поддерживает одномерные массивы любого типа. Массивы массивов не поддерживаются. В C++/CX среда выполнения Windows массивы проецируются в качестве Platform::Array класса.

Дополнительные сведения см. в разделах Array и WriteOnlyArray.

ref class и ref struct типы

Класс среда выполнения Windows проецируется в C++/CX как или ref classref struct тип, так как он копируется по ссылке. Управление памятью для ref class объектов ref struct обрабатывается прозрачно с помощью подсчета ссылок. Когда последняя ссылка на объект выходит из области, объект ликвидируется. A ref class или ref struct type can:

  • может содержать такие члены, как конструкторы, методы, свойства и события. Эти члены могут иметь public, protectedprivateили internal специальные возможности.

  • Может содержать закрытые вложенные enumили structclass определения.

  • могут напрямую наследовать от одного базового класса и реализовать любое число интерфейсов. Все ref class объекты неявно преобразуются в Platform::Object класс и могут переопределять свои виртуальные методы, например Object::ToString.

Объект ref class с открытым конструктором должен быть объявлен как sealed, чтобы предотвратить дальнейшее производное.

Дополнительные сведения см. в разделе Классы и структуры ссылки

value class и value struct типы

Или value class представляет базовую структуру данных и содержит только поля, которые могут быть value class типами, value struct типами или типамиPlatform::String^.value struct value struct и value class объекты копируются по значению.

Можно value struct сделать значение NULL, упаковав его в IBox интерфейс.

Дополнительные сведения см. в разделе Классы и структуры значения.

Разделяемые классы

Функция разделяемого класса позволяет определять один класс на несколько файлов. Это позволяет средствам создания кода, таким как редактор XAML изменять один файл, не касаясь другого файла, который вы редактируете.

Дополнительные сведения см. в разделе Разделяемые классы

Свойства

Свойство — это общедоступный элемент данных любого типа среда выполнения Windows. Он объявлен и определен с помощью property ключевое слово. Свойство реализуется как get/set пара методов. Клиентский код обращается к свойству, как если бы он был открытым полем. Свойство, которое не требует пользовательского get или set кода, называется тривиальным свойством и может быть объявлено без явных get или set методов.

Дополнительные сведения см. в разделе Свойства.

коллекции среда выполнения Windows в C++/CX

Среда выполнения Windows определяет набор интерфейсов для типов коллекций, которые каждый язык реализует самостоятельно. C++/CX предоставляет реализации в Platform::Collections::Vector классах,Platform::Collections::Mapклассах и других связанных конкретных типах коллекций, совместимых с их аналогами стандартной библиотеки C++.

Дополнительные сведения см. в разделе "Коллекции".

Типы шаблонов ref class

private и internal типы доступа ref class могут быть шаблонированы и специализированы.

Дополнительные сведения см. в разделе Классы ссылки шаблонов.

Интерфейсы

Интерфейс среда выполнения Windows определяет набор общедоступных свойств, методов и событий, которые должен реализовать или ref classref struct тип, если он наследует от интерфейса.

Дополнительные сведения см. в статье Интерфейсы.

Перечисления

Тип enum class в среда выполнения Windows напоминает область enum в C++. Базовый тип — int32если атрибут [Flags] не применяется— в этом случае базовый тип.uint32

Дополнительные сведения см. в разделе Перечисления.

Делегаты

Делегат в среда выполнения Windows аналогичен std::function объекту в C++. Это специальный ref class тип, используемый для вызова функций, предоставляемых клиентом, имеющих совместимые сигнатуры. Делегаты чаще всего используются в среда выполнения Windows в качестве типа события.

Дополнительные сведения см. в разделе Делегаты.

Исключения

В C++/CX можно перехватывать пользовательские типы исключений, std::exception типы и Platform::Exception типы.

Дополнительные сведения см. в разделе Исключения.

События

Событие является общедоступным членом в типе ref class делегата или ref struct типом. Событие может вызываться — или инициироваться — только классом-владельцем. Однако клиентский код может предоставлять свои собственные функции обработчика событий, которые вызываются при срабатывании класса владельцев события.

Для получения дополнительной информации см. Events.

Приведение

C++/CX поддерживает стандартные операторы static_castdynamic_castприведения C++, а reinterpret_castтакже safe_cast операторы, относящиеся к C++/CX.

Дополнительные сведения см. в разделе Приведение.

Упаковка-преобразование

Прямоугольная переменная — это тип значения, который упакован в ссылочный тип. Используйте прямоугольные переменные в ситуациях, когда требуется семантика ссылок.

Дополнительные сведения см. в разделе Упаковка.

Атрибуты

Атрибут — это значение метаданных, которое можно применить к любому элементу типа или типа среда выполнения Windows. Атрибуты можно проверить во время выполнения. Среда выполнения Windows определяет набор общих атрибутов в Windows::Foundation::Metadata пространстве имен. Определяемые пользователем атрибуты в общедоступных интерфейсах не поддерживаются среда выполнения Windows в этом выпуске.

Нерекомендуция API

Общедоступные API можно пометить как устаревшие с помощью того же атрибута, который используется среда выполнения Windows системными типами.

Дополнительные сведения см. в разделе "Нерекомендуемые типы и члены".

См. также

Справочник по языку C++/CX