Я думал о том, чтобы взять на себя задачу изучения C ++ для разработки приложений Metro, и именно тогда я наткнулся на C ++ / CX.
Могут ли приложения Metro быть написаны на C ++ 11? Они требуют C ++ / CX для работы? А что именно C ++ / CX? Можно ли создать приложение Metro, используя только C ++, или C ++ / CX требуется? Кроме того, как C ++ / CLI связан с этой картиной?
Ответы:
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 не так уж и хорош.источник
Ссылаясь на http://blogs.msdn.com/b/vcblog/archive/2012/08/29/cxxcxpart00anintroduction.aspx :
источник