Jump to content

С++/CX

C++/CX (расширения компонентов C++) — это языковая проекция для Microsoft платформы Windows Runtime . Он принимает форму расширения языка для C++ компиляторов и позволяет программистам C++ писать программы, вызывающие среды выполнения Windows (WinRT) API-интерфейсы . C++/CX заменяется проекцией языка C++/WinRT , которая не является расширением языка C++; скорее, это совершенно стандартная современная библиотека ISO C++17 на основе заголовочных файлов. [ 1 ]

Языковые расширения заимствуют синтаксис из C++/CLI, но ориентированы на универсальной платформы Windows собственный код среды выполнения Windows, а не на среду Common Language Runtime и управляемый код . Он содержит набор абстракций синтаксиса и библиотек, которые проецируют таким WinRT на основе подмножества WRL COM модель программирования образом, который интуитивно понятен программистам управляемых расширений C++/CLI.

Среду выполнения Windows можно вызвать из собственного ISO C++ нижнего уровня через библиотеку шаблонов C++ среды выполнения Windows (WRL). Однако WRL также заменяется C++/WinRT . [ 1 ]

Синтаксис расширения

[ редактировать ]

C++/CX представляет расширения синтаксиса для программирования для среды выполнения Windows. Общий синтаксис, не зависящий от платформы, совместим со стандартом C++11 .

Объекты WinRT создаются или активируются с помощью ref new и присваивается переменным, объявленным с помощью ^ (шляпа), унаследованная от C++/CLI.

Foo^ foo = ref new Foo();

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

Подсчет ссылок

[ редактировать ]

Объект WinRT учитывает количество ссылок и поэтому обрабатывается аналогично обычным объектам C++, заключенным вshared_ptrs . Объект будет удален, когда не останется ссылок, ведущих на него.

не Никакой уборки мусора предусмотрено. Тем не менее, ключевое слово gcnew был зарезервирован для возможного использования в будущем.

Классы времени выполнения
[ редактировать ]

Существуют специальные виды классов времени выполнения , которые могут содержать конструкции расширения компонентов. Их просто называют ссылочными классами, потому что они объявляются с использованием ref class.

public ref class MyClass
{

};
Частичные занятия
[ редактировать ]

В C++/CX представлена ​​концепция частичных классов . Эта функция позволяет разделить определение одного класса на несколько файлов, в основном для того, чтобы XAML инструменты проектирования графического пользовательского интерфейса могли автоматически генерировать код в отдельном файле, чтобы не нарушать логику, написанную разработчиком. Части позже объединяются при компиляции.

В языках .NET, таких как C#, эта функция имеется уже много лет. Частичные классы еще не вошли в стандарт C++ и поэтому не могут использоваться даже в C++20 .

Файл, который создается и обновляется разработчиком графического интерфейса и поэтому не должен изменяться программистом. Обратите внимание на ключевое слово partial.

// foo.private.h
#pragma once

partial ref class foo
{
private:
   int id_;
   Platform::String^ name_;
};

Файл, в который программист записывает логику пользовательского интерфейса. Импортируется заголовок, в котором определена сгенерированная компилятором часть класса. Обратите внимание, что ключевое слово partial в этом нет необходимости.

// foo.public.h
#pragma once
#include "foo.private.h"

ref class foo
{
public:
   int GetId();
   Platform::String^ GetName();
};

Это файл, в котором реализованы члены разделяемого класса.

// foo.cpp
#include "pch.h"
#include "foo.public.h"

int foo::GetId() {return id_;}
Platform::String^ foo::GetName {return name_;}

Дженерики

[ редактировать ]

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

generic<typename T> 
public ref class bag 
{
     property T Item;
};

Метаданные

[ редактировать ]

Все программы WinRT предоставляют свои объявленные классы и члены через метаданные . Формат тот же, что был стандартизирован как часть Common Language Infrastructure (CLI), стандарта, созданного на основе .NET Framework . Благодаря этому код можно использовать совместно с языками C++/CX, CLI и JavaScript, предназначенными для среды выполнения Windows.

Библиотека времени выполнения

[ редактировать ]

В C++/CX имеется набор библиотек, предназначенных для среды выполнения Windows. Они помогают объединить функциональность стандартной библиотеки C++ и WinRT.

Обнаружение на основе препроцессора

[ редактировать ]

Вы можете определить, включено ли расширение C++/CX, проверив наличие __cplusplus_winrt символ препроцессора.

#ifdef __cplusplus_winrt
// C++/CX specific code goes here...
#endif

См. также

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 773ea6c609cb74bb7b2d5cf10da3c9cd__1722459120
URL1:https://arc.ask3.ru/arc/aa/77/cd/773ea6c609cb74bb7b2d5cf10da3c9cd.html
Заголовок, (Title) документа по адресу, URL1:
C++/CX - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)