Microsoft (terutama, Herb Sutter ) merekomendasikan ketika menggunakan WinRT dengan C ++ / CX untuk menjaga WinRT pada batas-batas aplikasi dan menjaga inti aplikasi ditulis dalam standar ISO C ++.
Saya telah menulis sebuah aplikasi yang ingin saya tinggalkan portabel, jadi fungsionalitas inti saya ditulis dalam standar C ++, dan saya sekarang mencoba untuk menulis front-style Metro untuk itu menggunakan C ++ / CX. Namun, saya punya sedikit masalah dengan pendekatan ini. Misalnya, jika saya ingin mendorong vektor tipe C ++ yang ditentukan pengguna ke kontrol XAML ListView, saya harus membungkus tipe yang ditentukan pengguna dalam tipe ref / nilai WinRT agar dapat disimpan dalam a Vector^
. Dengan pendekatan ini, saya mau tidak mau membungkus sebagian besar kelas C ++ saya dengan kelas WinRT.
Ini adalah pertama kalinya saya mencoba menulis aplikasi asli portabel di C ++. Apakah benar-benar praktis untuk menjaga WinRT di sepanjang batas seperti ini? Bagaimana lagi jenis inti portabel ini dengan batasan platform khusus dapat ditangani?
sumber
Jawaban:
IMHO (programmer lama; bekerja di Microsoft tetapi ini adalah pendapat pribadi): sebelum saya dapat menjawab pertanyaan ini, Anda harus menjawab pertanyaan lain ini:
Di mana kode dipindahkan? Jika Anda tetap menggunakan satu platform (dalam hal ini, WinRT), maka dekatlah dengan platform - dan itu berarti menggunakan abstraksi yang ada. Per contoh Anda, kode Anda kemudian akan menggunakan Vektor ^ agar sesuai dengan kebutuhan WinRT.
OTOH, jika Anda pindah ke tempat lain (VMS rocks!), Maka standar berdasarkan masuk akal.
Mengingat bahwa tiga platform portable, seperti tablet terbesar di pasar semuanya menggunakan bahasa yang berbeda untuk tugas pemrograman umum, memindahkan kode mungkin bukan opsi yang berharga.
sumber
Anda tidak harus menggunakan C ++ / CX, sebagai gantinya Anda dapat menggunakan WRL ( Windows Runtime Library ) yang seperti templat ATL lama, bukan C + / pura-pura 'yang merupakan C ++ / CX. Ini adalah pendekatan "tingkat rendah" dari MS untuk mengkonsumsi objek WinRT dan sepenuhnya standar C ++ seperti yang digunakan Grandad untuk menulis!
Mungkin tidak sebagus C ++ / CX tapi itu masalah pendapat - pendapat pribadi saya adalah bahwa C ++ / CX adalah upaya ke-3 pada perluasan C ++, dan merupakan kegagalan ke-3. Abaikan dan harap itu berjalan dengan cara yang sama seperti 2 inkarnasi lainnya.
sumber