Microsoft звичайно робила систему C ++, яка дозволила вам отримати доступ до їх API Windows (званий win32), потім одного разу вони винайшли .NET і зрозуміли, що все повинно змінитися.
Таким чином, вони створили "Керовані розширення для C ++", які в основному були C ++, але з навантаженням нестандартних розширень, додаючи ключові слова, як __gc
підтримка функцій .NET (наприклад, виділення на купі GC, а не на рідній)
Але людям це не подобалося, як це було насправді; t C ++, маючи всі ці зайві ключові слова, тому Microsoft переробив його і назвав його C ++ / CLI, який мав набагато менший набір додаткових ключових слів, але ввів зміни синтаксису на зразок ^
(тобто посилання 'вказівник' на об’єкт .NET на купі GC).
Через кілька років Microsoft зрозуміла, що .NET не є срібною кулею, про яку вони сказали, і вони також об'єднали свої бойові команди Windows та розробників. Частина цієї повторної оцінки призвела до створення абсолютно нового API Windows, який називається WinRT, це повністю нативний код, і це означало, що старі розширення вже не є корисними, тому Microsoft розробила свої розширення на C ++ до того, що зробило роботу з новою WinRT API простіше - зберігаючи кілька розширень від C ++ / CLI (наприклад, ^).
Отже - ось три, три різні версії розширеного C ++, що є поверхнево C ++. Принаймні остання версія знову є нативним кодом, тому вам не потрібно використовувати розширення, якщо ви не хочете, оскільки ви можете безпосередньо отримати доступ до API (він називається WRL і дуже схожий на старі класи шаблонів ATL)
Якщо ви думаєте, що ви можете кодувати міжплатформенний код, який вам не захочеться - ви можете змінювати дзвінки API, але ви не можете використовувати ^
компілятор, окрім Visual C ++. Я рекомендую використовувати API WRL і зберігати свій код максимально стандартним, враховуючи "додатковий код", який вам потрібно буде написати в порівнянні з C ++ / CX, не так вже й чудово.