Microsoft dulu hanya membuat sistem C ++ yang memungkinkan Anda mengakses Windows API mereka (disebut win32), lalu suatu hari mereka menemukan .NET dan menganggap semuanya harus diubah.
Jadi mereka menciptakan "Ekstensi Terkelola untuk C ++" yang pada dasarnya adalah C ++ tetapi dengan beban ekstensi non-standar, menambahkan kata kunci ingin __gc
mendukung fitur .NET (seperti mengalokasikan pada tumpukan GC daripada yang asli)
Tetapi orang-orang tidak menyukai ini karena sebenarnya bukan C ++, memiliki semua kata kunci tambahan, jadi Microsoft mendesain ulang dan menyebutnya C ++ / CLI, yang memiliki kumpulan kata kunci tambahan yang jauh lebih kecil tetapi memperkenalkan perubahan sintaksis seperti ^
(yang merupakan referensi 'pointer' ke objek .NET pada heap GC).
Beberapa tahun kemudian dan Microsoft menyadari .NET bukanlah peluru perak seperti yang mereka katakan, dan mereka juga menggabungkan Windows dan tim Pengembang yang sedang bertarung. Bagian dari evaluasi ulang ini mengarah pada pembuatan API Windows baru, yang disebut WinRT, yang sepenuhnya merupakan kode asli dan ini berarti ekstensi lama tidak lagi berguna, jadi Microsoft mengembangkan ekstensi C ++ mereka ke yang membuat bekerja dengan yang baru WinRT API lebih mudah - dengan menjaga beberapa ekstensi dari C ++ / CLI (seperti ^).
Jadi - begitulah, 3 versi berbeda dari C ++ diperpanjang yang dangkal C ++. Setidaknya versi terbaru adalah kode asli lagi, jadi Anda tidak perlu menggunakan ekstensi jika Anda tidak mau karena Anda dapat langsung mengakses API (itu disebut WRL dan sangat mirip dengan kelas template ATL lama)
Jika Anda berpikir Anda mungkin sedang mengkode kode lintas-platform yang tidak Anda inginkan - Anda dapat mengubah panggilan API, tetapi Anda tidak dapat menggunakan ^
pada kompiler apa pun selain Visual C ++. Saya akan merekomendasikan menggunakan API WRL dan menjaga kode Anda sebagai standar mungkin mengingat 'kode tambahan' yang Anda butuhkan untuk menulis dibandingkan dengan C ++ / CX tidak terlalu bagus.