Microsoft (głównie Herb Sutter ) zaleca używanie WinRT z C ++ / CX, aby utrzymać WinRT na granicy aplikacji i zachować rdzeń aplikacji napisany w standardowym ISO C ++.
Piszę aplikację, którą chciałbym pozostawić przenośną, więc moja podstawowa funkcjonalność została napisana w standardowym C ++, a teraz próbuję napisać dla niej interfejs w stylu Metro przy użyciu C ++ / CX. Miałem jednak pewien problem z tym podejściem. Na przykład, jeśli chcę wcisnąć wektor typów C ++ zdefiniowanych przez użytkownika do kontrolki XAML ListView, muszę zawinąć mój typ zdefiniowany przez użytkownika w typ wartości referencyjnej / wartości WinRT, aby mógł zostać zapisany w pliku Vector^
. Dzięki takiemu podejściu nieuchronnie pozostawiam owijanie dużej części moich klas C ++ klasami WinRT.
Po raz pierwszy próbuję napisać przenośną natywną aplikację w C ++. Czy naprawdę praktyczne jest utrzymywanie WinRT wzdłuż takich granic? Jak inaczej można poradzić sobie z tym rodzajem przenośnego rdzenia z granicami specyficznymi dla platformy?
źródło
Odpowiedzi:
IMHO (stary programista; pracuj w firmie Microsoft, ale to jest osobista opinia): zanim będę mógł odpowiedzieć na to pytanie, musisz odpowiedzieć na inne pytanie:
Dokąd przenosi się kod? Jeśli trzymasz się jednej platformy (w tym przypadku WinRT), bądź blisko niej - a to oznacza używanie istniejących abstrakcji. Na przykład Twój kod użyłby Vector ^ w celu dopasowania do potrzeb WinRT.
OTOH, jeśli przeprowadzasz się gdzieś indziej (VMS rock!), To oparte na standardach ma sens.
Biorąc pod uwagę, że trzy największe przenośne platformy typu tablet na rynku używają różnych języków do typowych zadań programistycznych, przeniesienie kodu może nie być cenną opcją.
źródło
Nie musisz używać C ++ / CX, zamiast tego możesz użyć WRL ( Windows Runtime Library ), która przypomina stare szablony ATL, a nie „udawać” C ++, czyli C ++ / CX. Jest to podejście „niskiego poziomu” od MS do używania obiektów WinRT i jest całkowicie standardowym C ++, jak pisał Grandad!
To może nie być tak „ładne” jak C ++ / CX, ale to kwestia opinii - moim osobistym zdaniem jest to, że C ++ / CX jest trzecią próbą rozszerzonego C ++ i jest trzecią porażką. Zignoruj to i miej nadzieję, że pójdzie tak samo, jak pozostałe 2 inkarnacje.
źródło