| 원저자 | 케니 커 |
|---|---|
| 개발자 | 마이크로소프트 |
| 발표일 | 2015년 6월 23일 |
| 안정화 버전 | 3.0.260520.1
/ 2026년 5월 22일 |
| 저장소 | github |
| 프로그래밍 언어 | C++ |
| 운영 체제 | 마이크로소프트 윈도우 |
| 이전 소프트웨어 | C++/CX, WRL |
| 종류 | 소프트웨어 개발 도구 |
| 라이선스 | MIT 허가서 |
| 웹사이트 | aka |
C++/WinRT는 마이크로소프트의 윈도우 런타임 플랫폼을 위한 C++ 라이브러리로, 현대적인 윈도우 API에 접근할 수 있도록 설계되었다. C++/WinRT는 C++ 언어에 대한 확장이며 최신 버전의 마이크로소프트 비주얼 C++을 요구하는 C++/CX와 달리, 표준 헤더 파일 라이브러리(최소 C++17 버전 필요)로 제공된다.
C++/WinRT는 마이크로소프트 윈도우 SDK 버전 10.0.17134.0(윈도우 10, 버전 1803)의 일부로 도입되었으며, 윈도우 앱 SDK(이전 명칭: 프로젝트 리유니언)의 구성 요소이다. 비주얼 스튜디오의 C++/WinRT 지원은 공식 지원되는 확장을 통해 제공된다.
C++/WinRT는 2015년 케니 커(Kenny Kerr)에 의해 처음 출시되었으며, 그는 얼마 지나지 않아 마이크로소프트에 입사했다. C++/WinRT는 현재 윈도우 런타임 C++ 템플릿 라이브러리(WRL)와 C++/CX를 모두 대체하는 마이크로소프트의 권장 방식이다.
마이크로소프트의 윈도우 런타임은 컴포넌트 오브젝트 모델(COM) API를 기반으로 하며, 언어 프로젝션(language projection)을 통해 접근하도록 설계되었다. 언어 프로젝션은 COM 세부 사항을 숨기고, 해당 언어에 더 자연스러운 프로그래밍 경험을 제공한다. C++ 개발자에게 있어 C++/WinRT는 공식적으로 지원되는 현대적인 C++ 언어 프로젝션이다. 헤더 전용 라이브러리일 뿐만 아니라, WinRT 네임스페이스당 하나의 모듈을 갖는 모듈도 제공된다(winrt.*).
버전 10.0.17134.0(윈도우 10, 버전 1803)부터 마이크로소프트 윈도우 SDK는 퍼스트 파티 윈도우 API를 사용하기 위한 헤더 파일 기반의 표준 C++ 라이브러리를 포함하고 있다(즉, 윈도우 네임스페이스 내의 윈도우 런타임 API). C++/WinRT는 cppwinrt.exe 도구와 함께 제공되는데, 이 도구는 윈도우 런타임 메타데이터(.winmd) 파일을 가리켜 C++/WinRT 코드에서 사용할 수 있도록 메타데이터에 기술된 API를 투영하는 헤더 파일 기반의 표준 C++ 라이브러리를 생성할 수 있다. 윈도우 런타임 메타데이터(.winmd) 파일은 윈도우 런타임 API 표면을 기술하는 표준적인 방법을 제공한다. 사용자는 `cppwinrt.exe` 도구를 메타데이터로 지정함으로써, 세컨드 파티나 서드 파티 윈도우 런타임 구성 요소에 구현된 런타임 클래스, 또는 사용자가 직접 구현한 애플리케이션을 위한 라이브러리를 생성할 수 있다.
C++/WinRT를 사용하면 사용자는 COM 스타일의 프로그래밍에 의존하지 않고도 표준 C++을 사용하여 자신만의 런타임 클래스를 구현할 수 있다. 런타임 클래스의 경우, 형식은 MIDL 파일(.idl)에 기술할 수 있으며, 해당 파일로부터 midl.exe 및 cppwinrt.exe 도구가 구현을 위한 상용구 소스 코드 파일을 생성하여 사용자가 자신의 구현을 추가할 수 있도록 한다. 또는 사용자가 C++/WinRT 헤더 라이브러리의 일부인 기본 클래스를 상속받아 인터페이스를 직접 구현할 수도 있다. 이러한 기술은 정적 디스패치를 통한 함수 호출을 위해 CRTP(Curiously recurring template pattern)를 사용한다. C++/WinRT는 생산성과 런타임 성능을 높이기 위해 수많은 현대적인 ISO C++11(및 그 이후) 언어 기능을 활용하는데, 이러한 기능들은 C++/WinRT의 전신(WRL 및 C++/CX)이 설계될 당시에는 사용할 수 없었다.
C++/WinRT의 설계와 개발은 2014년 당시 독립 소프트웨어 개발자였던 케니 커에 의해 시작되었다. 당시 개발자들이 C++을 사용하여 윈도우 런타임 API를 호출하는 주된 방법은 C++/CX 언어 프로젝션이었다. C++/CX는 C++/CLI에서 물려받은 ref new나 ^(해트) 표기법과 같은 비표준 확장을 C++ 언어에 추가한다. 당시에는 ISO C++ 언어 기능의 발전으로 확장 없이 표준 C++을 위한 윈도우 런타임 언어 프로젝션을 설계하는 것이 가능해졌다는 사실이 충분히 인지되지 못했다. 커는 "마이크로소프트에는 C++ 및 COM과 함께 수십 년간의 경력을 쌓은 매우 숙련된 C++ 개발자들이 많습니다. 하지만 불가능하다고 생각하지 않았던 누군가가 일단 시도해 보고 그것이 작동함을 보여줄 필요가 있었다고 생각합니다."라고 말했다.
"저는 이전에 COM API를 현대적인 C++로 투영해 본 경험이 있었기 때문에, 같은 기술을 윈도우 런타임에 적용할 수 있을지 확인하기로 했습니다." C++/WinRT 개발의 초기 과제 중 하나는 윈도우 런타임이 자바스크립트 및 관리되는 닷넷 언어들을 위한 프로젝션을 기본적으로 지원하기 위해 만들어야 하는 트레이드오프를 관리하는 것이었다. 제네릭 컬렉션이 언어 프로젝션 전반에서 작동하는 방식의 복잡성이나, 표준 C++이 윈도우 런타임의 인터페이스 버전 관리 모델을 효율적으로 처리할 방법을 고안하는 것 또한 이러한 설계 과제의 예였다. "그 작업은 당시 저의 C++에 대한 이해도를 크게 높여주었고, 이후 마이크로소프트 비주얼 C++ 컴파일러가 그러한 기술을 이러한 규모에서 더 효율적으로 처리할 수 있도록 밀어붙이는 계기가 되었습니다."
케니 커는 2022년 9월, C++/WinRT가 유지 관리 모드로 전환되었으며 더 이상의 새로운 기능은 추가되지 않을 것이고, C++/WinRT 버전 3에 대한 계획도 없다고 밝히며 "cppwinrt는 모든 목표를 달성했으며 일반적으로 완성된 것으로 간주되고 버그도 거의 없다"라고 덧붙였다. 마이크로소프트가 제공하는 "Windows Implementation Library"(WIL)는 그동안 추가적인 도우미 기능을 제공할 수 있는 상호 보완적인 라이브러리로 기술되었다. 그럼에도 불구하고 2026년 5월 22일, 3.0 릴리스가 이루어졌다.