Microsoft раньше просто создавала систему C ++, которая позволяла бы вам получить доступ к их Windows API (называемому win32), затем однажды они изобрели .NET и решили, что все должно измениться.
Поэтому они создали «Managed Extensions for C ++», который был в основном C ++, но с множеством нестандартных расширений, добавляя ключевые слова, например, __gc
для поддержки функций .NET (например, распределение в куче GC, а не в собственной).
Но людям это не понравилось, так как на самом деле это не было C ++, имея все эти дополнительные ключевые слова, поэтому Microsoft перепроектировала его и назвала его C ++ / CLI, который имел гораздо меньший набор дополнительных ключевых слов, но представил изменения синтаксиса, такие как ^
(который является ссылка «указатель» на объект .NET в куче GC).
Спустя несколько лет Microsoft поняла, что .NET - не серебряная пуля, о которой они говорили, и они также объединили свои сражающиеся команды Windows и разработчиков. Часть этой переоценки привела к созданию совершенно нового Windows API, называемого WinRT, который является полностью нативным кодом, и это означало, что старые расширения больше не были полезны, поэтому Microsoft разработала свои расширения C ++ для того, который позволял работать с новым WinRT API проще - сохранив несколько расширений из C ++ / CLI (например, ^).
Итак - 3 различных версии расширенного C ++, который внешне является C ++. По крайней мере, последняя версия снова является нативным кодом, поэтому вам не нужно использовать расширения, если вы не хотите, поскольку вы можете напрямую обращаться к API (он называется WRL и очень похож на старые классы шаблонов ATL)
Если вы думаете, что можете кодировать кроссплатформенный код, который вам не нужен - вы можете изменить вызовы API, но вы не можете использовать его ^
на любом компиляторе, кроме Visual C ++. Я бы порекомендовал использовать WRL API и поддерживать ваш код как можно более стандартным, учитывая, что «дополнительный код», который вам нужно написать, по сравнению с C ++ / CX не так уж и хорош.