Обзор системы типов (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
. public
ref 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.
Совет
Типы в пространстве имен не отображаются в .winmd
Platform::Collections
файле, так как они не открыты. Они являются частными реализациями интерфейсов, определенных в Windows::Foundation::Collections
C++. Приложение среда выполнения 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
, UInt16
Double
Char16
Boolean
Int16
UInt32
String
Int32
Int64
UInt64
Single
и . C++/CX поддерживает основные числовые типы в своем пространстве имен по умолчанию как uint16
, uint32
, uint64
int64
int32
float32
int16
, 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 class
ref struct
тип, так как он копируется по ссылке. Управление памятью для ref class
объектов ref struct
обрабатывается прозрачно с помощью подсчета ссылок. Когда последняя ссылка на объект выходит из области, объект ликвидируется. A ref class
или ref struct
type can:
может содержать такие члены, как конструкторы, методы, свойства и события. Эти члены могут иметь
public
,protected
private
илиinternal
специальные возможности.Может содержать закрытые вложенные
enum
илиstruct
class
определения.могут напрямую наследовать от одного базового класса и реализовать любое число интерфейсов. Все
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 class
ref 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_cast
dynamic_cast
приведения C++, а reinterpret_cast
также safe_cast
операторы, относящиеся к C++/CX.
Дополнительные сведения см. в разделе Приведение.
Упаковка-преобразование
Прямоугольная переменная — это тип значения, который упакован в ссылочный тип. Используйте прямоугольные переменные в ситуациях, когда требуется семантика ссылок.
Дополнительные сведения см. в разделе Упаковка.
Атрибуты
Атрибут — это значение метаданных, которое можно применить к любому элементу типа или типа среда выполнения Windows. Атрибуты можно проверить во время выполнения. Среда выполнения Windows определяет набор общих атрибутов в Windows::Foundation::Metadata
пространстве имен. Определяемые пользователем атрибуты в общедоступных интерфейсах не поддерживаются среда выполнения Windows в этом выпуске.
Нерекомендуция API
Общедоступные API можно пометить как устаревшие с помощью того же атрибута, который используется среда выполнения Windows системными типами.
Дополнительные сведения см. в разделе "Нерекомендуемые типы и члены".