C++/CX
C++/CX (extensions de composant) est une extension du langage pour compilateurs C++ de Microsoft qui permet aux programmeurs C++ d'écrire des programmes pour la plateforme Windows Runtime , ou l'API WinRT.
Les extensions de langage empruntent la syntaxe de C++/CLI , mais ciblent le code natif Universal Windows Platform au lieu du Common Language Runtime et du code managé. Il apporte un ensemble d'abstractions de syntaxe et de bibliothèque qui projettent le modèle de programmation WinRT basé sur le sous-ensemble WRL de COM d'une manière intuitive pour les codeurs d'extensions gérés C++/CLI.
Il est possible d'appeler Windows Runtime à partir d'ISO C++ natif via la bibliothèque de modèles C++ (WRL) Windows Runtime de bas niveau.
L'Extension de la syntaxe
C++/CX introduit des extensions de syntaxe pour la programmation pour Windows Runtime. La syntaxe globale non spécifique à la plate-forme est compatible avec la norme C++11.
Les objets
Les objets WinRT sont créés, ou activés, en utilisant ref new
et assignés aux variables déclarées avec la notation ^
héritée de C++/CLI. Une variable WinRT est simplement une paire de pointeur vers une table de méthode virtuelle et un pointeur vers les données internes de l'objet.
Comptage de référence
Un objet WinRT est compté par référence et gère donc de la même manière que les objets C++ ordinaires inclus dans shared ptrs. Un objet sera supprimé s'il n'y a plus de références qui y conduisent.
Il n'y a pas de collecte des ordures impliqués. Néanmoins, le mot-clé gcnew
a été réservé pour une utilisation future éventuelle.
Classes d'exécution
Il existe des types spéciaux de classes d'exécution qui peuvent contenir des constructions d'extension de composant. Ils sont simplement appelés ref classes , car ils sont déclarés en utilisant ref class
.
Classes partielles
C++/CX introduit le concept de classes partielles. Cette fonctionnalité permet de diviser une seule classe sur plusieurs fichiers, principalement pour permettre aux outils de conception d'interface utilisateur graphique XAML de générer automatiquement du code dans un fichier distinct afin de ne pas casser la logique écrite par le développeur. Les parties sont ensuite fusionnées lors de la compilation.
Les langages .NET comme C# ont cette fonctionnalité depuis de nombreuses années. Les classes partielles ne sont pas encore entrées dans la norme C++ et ne peuvent donc pas être utilisées en C++11 pur.
Un fichier qui est généré et mis à jour par le concepteur de l'interface graphique, ne devrait donc pas être modifié par le programmeur. Notez le mot clé partial partial
.
// foo.private.h
#pragma once
partial ref class foo
{
private:
int id_;
Platform::String^ name_;
};
Le fichier où le programmeur écrit la logique de l'interface utilisateur, l'en-tête dans lequel le compilateur a généré une partie de la classe est importé. Notez que le mot-clé partial
n'est pas nécessaire.
// foo.public.h
#pragma once
#include "foo.private.h"
ref class foo
{
public:
int GetId();
Platform::String^ GetName();
};
C'est le fichier dans lequel les membres de la classe partielle sont implémentés.
// foo.cpp
#include "pch.h"
#include "foo.public.h"
int foo::GetId() {return id_;}
Platform::String^ foo::GetName {return name_;}
Les génériques
Windows Runtime et donc C++/CX prennent en charge les génériques basés sur l'exécution. Les informations de type générique sont contenues dans les métadonnées et instanciées lors de l'exécution, contrairement aux modèles C++ qui sont des constructions à la compilation. Les deux sont pris en charge par le compilateur et peuvent être combinés.
generic<typename T>
public ref class bag
{
property T Item;
};
Les métadonnées
Tous les programmes WinRT exposent leurs classes et membres déclarés via des métadonnées. Le format est le même que celui qui a été standardisé dans le cadre de l'infrastructure CLI), la norme créée à partir du Framework .NET. Pour cette raison, le code peut être partagé entre C++/CX, les langages CLI et JavaScript qui ciblent Windows Runtime.
Bibliothèque d'exécution
Le C++/CX possède un ensemble de bibliothèques qui ciblent Windows Runtime. Ils aident à faire le lien entre la fonctionnalité de la bibliothèque standard C++ et WinRT.
Préprocesseur de détection basée sur l'
Vous pouvez détecter si l'extension C++/CX est activée en testant l'existence du symbole de préprocesseur__cplusplus_winrt
.
Liens externes
- À l'intérieur du C++/CX de Conception Visual C++ Blog de l'Équipe
- GoingNative 3: Le C++/CX Épisode avec Marian Luparu - Canal 9
- WinRT et Fichiers winmd - Marius Bancila Blog
- Visual C++ de Référence du Langage (C++/CX)
- Portail de l’informatique