A Microsoft (principalmente, Herb Sutter ) recomenda ao usar o WinRT com C ++ / CX para manter o WinRT nos limites do aplicativo e manter o núcleo do aplicativo escrito no padrão ISO C ++.
Como eu escrevi um aplicativo que gostaria de deixar portátil, minha funcionalidade principal foi escrita em C ++ padrão e agora estou tentando escrever um front end no estilo Metro para ele usando C ++ / CX. No entanto, tive um problema com essa abordagem. Por exemplo, se eu quiser enviar por push um vetor de tipos C ++ definidos pelo usuário para um controle XAML ListView, preciso envolver meu tipo definido pelo usuário em um tipo de ref / value do WinRT para que ele seja armazenado em a Vector^
. Com essa abordagem, inevitavelmente fico envolvida em grande parte das minhas classes C ++ nas classes WinRT.
Esta é a primeira vez que tentei escrever um aplicativo nativo portátil em C ++. É realmente prático manter o WinRT dentro dos limites como este? De que outra forma esse tipo de núcleo portátil com um limite específico de plataforma pode ser tratado?
fonte
Respostas:
IMHO (programador antigo; trabalho na Microsoft, mas esta é uma opinião pessoal): antes que eu possa responder a essa pergunta, você deve responder a outra pergunta:
Para onde o código está indo? Se você estiver usando uma única plataforma (neste caso, o WinRT), esteja próximo da plataforma - e isso significa usar as abstrações existentes. Por seu exemplo, seu código usaria Vector ^ para corresponder às necessidades do WinRT.
OTOH, se você estiver se mudando para outro lugar (o VMS é demais!), Então os padrões baseados fazem sentido.
Dado que as três maiores plataformas portáteis semelhantes a tablets do mercado usam linguagens diferentes para tarefas comuns de programação, mover o código pode não ser uma opção valiosa.
fonte
Você não precisa usar C ++ / CX; em vez disso, pode usar o WRL ( Windows Runtime Library ), que é como os modelos ATL antigos, não o C ++ 'fingido' que é C ++ / CX. É a abordagem de "baixo nível" da MS para consumir objetos WinRT e é completamente C ++ padrão como o Grandad costumava escrever!
Pode não ser tão "legal" quanto o C ++ / CX, mas isso é uma questão de opinião - minha opinião pessoal é que o C ++ / CX é a terceira tentativa de um C ++ estendido e é uma terceira falha. Ignore-o e espere que seja da mesma maneira que as outras 2 encarnações.
fonte