WinRT를 실제로 경계에서 사용할 수 있습니까?


15

Microsoft (주로 Herb Sutter )는 WinRT를 C ++ / CX와 함께 사용하여 WinRT를 응용 프로그램의 경계에 유지하고 응용 프로그램의 핵심을 표준 ISO C ++로 작성하도록 권장합니다.

이식성이 뛰어난 응용 프로그램을 작성하고 있으므로 핵심 기능은 표준 C ++로 작성되었으며 이제 C ++ / CX를 사용하여 Metro 스타일 프런트 엔드를 작성하려고합니다. 그러나이 접근법에 약간의 문제가 있습니다. 예를 들어, 사용자 정의 C ++ 유형의 벡터를 XAML ListView 컨트롤에 푸시하려면 사용자 정의 유형을 WinRT 참조 / 값 유형으로 래핑하여에 저장해야합니다 Vector^. 이 접근법을 사용하면 필자는 C ++ 클래스의 대부분을 WinRT 클래스로 래핑하는 것이 불가피합니다.

C ++로 이식 가능한 기본 응용 프로그램을 작성하려고 시도한 것은 이번이 처음입니다. 이와 같은 경계를 따라 WinRT를 유지하는 것이 실제로 실용적입니까? 플랫폼 별 경계가있는 이러한 유형의 휴대용 코어를 어떻게 처리 할 수 ​​있습니까?


Model이 표준 C ++이고 V와 VM이 WinRT interop 객체 인 MVVM과 같은 것?
Max

5
"그러나 각 VM은 효과적으로 내 표준 모델을 둘러싼 래퍼로 바뀝니다." -모든 시나리오에서 뷰 모델에 일반적입니다.
MattDavey

1
@ GlenH7, 나는 의견이 대부분 저에게 답했다고 생각합니다. 나는 같은 결론에 도달했지만 누군가가 더 영리한 아이디어를 염두에두기를 바랐습니다. 일반적으로 상황은 그대로입니다. 코드의 일부를 분리하기 위해 최선을 다할 수 있지만 대부분의 경우 코드의 플랫폼 별 부분을 다시 작성해야합니다 (위의 ViewModel 예제에서와 같이).
Bret Kuhns

1
@ GlenH7 아마도 여러 플랫폼에서 응용 프로그램 코드를 일관되게 유지하는 유일한 방법은 고유 한 플랫폼 추상화 계층을 작성하는 것이지만, 그 계층은 결국 내가 피하려고 시도했던 것입니다. 단순히 레이어 추상화로 문제를 해결하여 물건을 격리시킵니다. 아마도 도움이 되겠지만 결국에는 여전히 일을하고 있습니다.
Bret Kuhns

1
우리는 안드로이드에서 C 라이브러리를 Java에 매끄럽게 붙이기 위해 "실버 글 머리 기호"를 한 번 만들려고했습니다. 마지막으로 ~ × 10 더 많은 시간을 소비하고 이국적인 디버깅 기술을 사용하여 작동합니다 (프런티어의 비정상적인 동작을 해결하기 위해). 확실히 재미있었습니다.
Alex Cohn

답변:


8

IMHO (이전 프로그래머; Microsoft에서 일하지만 이것은 개인적인 견해입니다) :이 질문에 대답하기 전에이 다른 질문에 대답해야합니다.

코드는 어디로 이동합니까? 단일 플랫폼 (이 경우 WinRT)을 고수하는 경우 플랫폼에 가까이 있어야합니다. 이는 기존 추상화를 사용한다는 의미입니다. 예를 들어, 코드는 WinRT 요구를 충족시키기 위해 Vector ^를 사용합니다.

OTOH, 다른 곳으로 이동하는 경우 (VMS Rock!) 표준 기반이 적합합니다.

시장에서 가장 큰 휴대용 태블릿과 같은 3 가지 플랫폼은 모두 공통 프로그래밍 작업에 서로 다른 언어를 사용하므로 코드를 이동하는 것이 유용한 옵션이 아닐 수 있습니다.


나는 동의한다. WinRT를 대상으로 프로젝트를 시작했지만 Android / iOS가 이식하기에 매력적인 플랫폼이라는 것을 알고이 질문을 촉발했습니다. 그 후 WinRT에 대해서만 구체적으로 작성하기로 결정했습니다. 프로젝트 자체가 많은 사람들을 끌어 들이면 포팅 (또는 다른 플랫폼으로 다시 쓰는 것)에 대해 걱정할 것입니다.
Bret Kuhns

@alexcohn이 지적했듯이 플랫폼 간을 결정할 때 핵심 기능이 충분히 무겁다면 플랫폼 특정 레이어로 휴대용 코드를 래핑하는 것이 좋습니다. 그렇지 않으면 코드를 다시 작성하고 테스트 스위트를 사용하여 다른 플랫폼에서 동작을 확인합니다 (적절한 경우).
Bret Kuhns

0

C ++ / CX를 사용할 필요는 없으며, 대신 C ++ / CX 인 'pretend'C ++가 아닌 이전 ATL 템플릿과 유사한 WRL ( Windows Runtime Library )을 사용할 수 있습니다 . MS에서 WinRT 객체 소비에 이르는 "낮은 수준"접근 방식이며 Grandad와 같은 표준 C ++입니다.

C ++ / CX만큼 "좋은"것이 아닐 수도 있지만 그것은 의견의 문제입니다. 제 개인적으로는 C ++ / CX가 확장 C ++에서 세 번째 시도이고 세 번째 실패라는 것입니다. 그것을 무시하고 다른 두 화신과 같은 방식으로 진행되기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.