C++/CX
C++/CX (Component Extensions) — расширения языка C++, реализованные в компиляторах от Microsoft. Позволяют писать программы на языке C++ для новой платформы Windows Runtime (WinRT). Они привносят синтаксические и библиотечные абстракции, которые работают с программной моделью COM WinRT в естественном для программистов на C++ стиле.
Синтаксис схож с использовавшимся в C++/CLI, но программы на C++/CX работают на Windows Runtime и компилируются в машинный код, а не на Common Language Runtime и байт-код managed code.
Содержание
Синтаксис расширений
В C++/CX вводятся синтаксические расширения для программирования для Windows Runtime. Общий платформенно-независимый синтаксис совместим с стандартом C++11.
Объекты
Объекты WinRT создаются (активируются) при помощи ref new
и присваиваются к переменным, объявленным с нотацией ^
, унаследованной от C++/CLI.
Foo^ foo = ref new Foo();
Переменная WinRT представляет собой пару указателей: указатель на таблицу виртуальных методов и указатель на внутренние данные объекта.
Подсчет ссылок
Объекты WinRT используют подсчет ссылок и ведут себя сходно с обычными объектами C++, используемыми с умными указателями (shared_ptr). Объект подлежит удалению, когда на него не будет вести ни одной ссылки.
Сборка мусора не осуществляется, однако ключевое слово gcnew
было зарезервировано для возможного использования в будущем.
Классы
Классы Runtime
Специальный тип runtime классов, которые могут содержать в себе конструкции расширяющие компонент. Иногда их называют классы ref, так как они объявляются с помощью конструкции ref class
:
public ref class MyClass
{
};
Частичные классы
C++/CX вводит концепт частичных классов (partial classes). С их применением возможно определить один класс по частям в нескольких файлах с исходными текстами. Например, они могут использоваться для реализации генераторов кода для GUI XAML. Во время компиляции части класса объединяются в единый класс.
Языки .NET, такие как C# поддерживали такое много лет. Однако они не вошли в стандарт C++ 2011 года и не могут использоваться в «чистом» C++11.
Файл, сгенерированный и обновляемый дизайнером GUI, не должен изменяться программистом вручную. Обратите внимание на использование ключевого слово partial
.
// foo.private.h
#pragma once
partial ref class foo
{
private:
int id_;
Platform::String^ name_;
};
Файл, в котором программист описывает логику пользовательского интерфейса. Заголовочный файл, сгенерированный ранее, подключается через include. В данном файл ключевое слово 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_;}
Generics
Windows Runtime и, следовательно, C++/CX поддерживают runtime generics. Информация об обобщенных типах сохраняется в метаданных и инстанциируется во время исполнения (в отличие от классических шаблонов C++, которые обрабатываются в момент компиляции).
generic<typename T>
public ref class bag
{
property T Item;
};
Метаданные
Все WinRT программы описывают объявленные в них классы и их члены через метаданные. Их формат совпадает с форматом метаданных Common Language Infrastructure (CLI), который был создан для .NET Framework. Благодаря этому возможно комбинирование кодов, написанных на C++/CX, языках CLI и на Javascript.
Библиотека Runtime
C++/CX имеет набор библиотек, предназначенных для работы с Windows Runtime. Они реализуют интеграцию функциональности C++ STL и WinRT.
См. также
Напишите отзыв о статье "C++/CX"
Примечания
<imagemap>: неверное или отсутствующее изображение |
Для улучшения этой статьи желательно?:
|
Ссылки
- [blogs.msdn.com/b/vcblog/archive/2011/10/20/10228473.aspx Inside the C++/CX Design — Visual C++ Team Blog]
- [channel9.msdn.com/Shows/C9-GoingNative/GoingNative-3-The-CCX-Episode-with-Marian-Luparu GoingNative 3: The C++/CX Episode with Marian Luparu — Channel 9]
- [mariusbancila.ro/blog/tag/ccx/ WinRT and winmd Files — Marius Bancila’s Blog]
|
Отрывок, характеризующий C++/CX
Гостиная Анны Павловны начала понемногу наполняться. Приехала высшая знать Петербурга, люди самые разнородные по возрастам и характерам, но одинаковые по обществу, в каком все жили; приехала дочь князя Василия, красавица Элен, заехавшая за отцом, чтобы с ним вместе ехать на праздник посланника. Она была в шифре и бальном платье. Приехала и известная, как la femme la plus seduisante de Petersbourg [самая обворожительная женщина в Петербурге,], молодая, маленькая княгиня Болконская, прошлую зиму вышедшая замуж и теперь не выезжавшая в большой свет по причине своей беременности, но ездившая еще на небольшие вечера. Приехал князь Ипполит, сын князя Василия, с Мортемаром, которого он представил; приехал и аббат Морио и многие другие.
– Вы не видали еще? или: – вы не знакомы с ma tante [с моей тетушкой]? – говорила Анна Павловна приезжавшим гостям и весьма серьезно подводила их к маленькой старушке в высоких бантах, выплывшей из другой комнаты, как скоро стали приезжать гости, называла их по имени, медленно переводя глаза с гостя на ma tante [тетушку], и потом отходила.
Все гости совершали обряд приветствования никому неизвестной, никому неинтересной и ненужной тетушки. Анна Павловна с грустным, торжественным участием следила за их приветствиями, молчаливо одобряя их. Ma tante каждому говорила в одних и тех же выражениях о его здоровье, о своем здоровье и о здоровье ее величества, которое нынче было, слава Богу, лучше. Все подходившие, из приличия не выказывая поспешности, с чувством облегчения исполненной тяжелой обязанности отходили от старушки, чтобы уж весь вечер ни разу не подойти к ней.
Молодая княгиня Болконская приехала с работой в шитом золотом бархатном мешке. Ее хорошенькая, с чуть черневшимися усиками верхняя губка была коротка по зубам, но тем милее она открывалась и тем еще милее вытягивалась иногда и опускалась на нижнюю. Как это всегда бывает у вполне привлекательных женщин, недостаток ее – короткость губы и полуоткрытый рот – казались ее особенною, собственно ее красотой. Всем было весело смотреть на эту, полную здоровья и живости, хорошенькую будущую мать, так легко переносившую свое положение. Старикам и скучающим, мрачным молодым людям, смотревшим на нее, казалось, что они сами делаются похожи на нее, побыв и поговорив несколько времени с ней. Кто говорил с ней и видел при каждом слове ее светлую улыбочку и блестящие белые зубы, которые виднелись беспрестанно, тот думал, что он особенно нынче любезен. И это думал каждый.
Маленькая княгиня, переваливаясь, маленькими быстрыми шажками обошла стол с рабочею сумочкою на руке и, весело оправляя платье, села на диван, около серебряного самовара, как будто всё, что она ни делала, было part de plaisir [развлечением] для нее и для всех ее окружавших.
– J'ai apporte mon ouvrage [Я захватила работу], – сказала она, развертывая свой ридикюль и обращаясь ко всем вместе.
– Смотрите, Annette, ne me jouez pas un mauvais tour, – обратилась она к хозяйке. – Vous m'avez ecrit, que c'etait une toute petite soiree; voyez, comme je suis attifee. [Не сыграйте со мной дурной шутки; вы мне писали, что у вас совсем маленький вечер. Видите, как я одета дурно.]
И она развела руками, чтобы показать свое, в кружевах, серенькое изящное платье, немного ниже грудей опоясанное широкою лентой.
– Soyez tranquille, Lise, vous serez toujours la plus jolie [Будьте спокойны, вы всё будете лучше всех], – отвечала Анна Павловна.
– Vous savez, mon mari m'abandonne, – продолжала она тем же тоном, обращаясь к генералу, – il va se faire tuer. Dites moi, pourquoi cette vilaine guerre, [Вы знаете, мой муж покидает меня. Идет на смерть. Скажите, зачем эта гадкая война,] – сказала она князю Василию и, не дожидаясь ответа, обратилась к дочери князя Василия, к красивой Элен.