Microsoft Consumer Channels and Central Marketing Group 8/8/2018 C++/CX推奨プログラミング めとべや東京#3 2014/1/18 Sat 遥佐保(はるか・さお) © 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
自己紹介 @hr_sao コミュニティ(大阪) Room metro C++テンプレート完全ガイド読書会 8/8/2018 自己紹介 @hr_sao コミュニティ(大阪) Room metro C++テンプレート完全ガイド読書会 Microsoft MVP for Client Development [(Jan,2010 -)Jan,2013 - Dec,2014] © 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
C++/CXストアアプリ 推奨のプログラミング方法があります
おさらい
Windows Kernel Services 8/8/2018 WindowsStoreApps環境(UI XAML) http://msdn.microsoft.com/ja-jp/library/windows/apps/jj160326.aspx OS process 混ぜるな危険! App container ( package manifest ) UI controls ( XAML ) 相互互換のための C++言語拡張機能 (中間の変換無し) C++実装クラス (ネイティブ) VSプロジェクト テンプレート WindowsStoreAppsを取り巻く環境のイメージ図 C++のふりをしているC++/CX 実行環境の中で、アプリが許可されるべき操作を柔軟に制御することができる デスクトップアプリやコンソールアプリでは明示的に出来なかった ビルドインのテンプレートを使う(アイコン、スタンダードスタイルXAML) 例えば、WinRTの機能は何かというと、タッチベースの操作にも対応している C++/CX Windows Runtime Win32 and COM CRT STL PPL Windows Kernel Services © 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
推奨されているプログラミング方法
ラムダ式を使う int _tmain(int argc, _TCHAR* argv[]) { 8/8/2018 ラムダ式を使う [] : ラムダキャプチャ () : 関数の引数 {} : 関数の本体、コード () : 関数呼び出し #include "stdafx.h" #include <string> #include <iostream> int _tmain(int argc, _TCHAR* argv[]) { [ ]( std::string const &str ) // 引数定義 { std::cout << str << std::endl; } // 関数の本体 ( “Hello World!“ ); // 関数呼び出し return 0; } PPLタスク、STLはラムダで書きます © 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
スマートポインタを使う 変数名 Windows Runtime 変数 ^ (ハット) COM変数 8/8/2018 スマートポインタを使う 変数名 Windows Runtime 変数 ^ (ハット) COM変数 Microsoft::WRL::ComPtr その他 std::shared_ptr / std::unique_ptr など、スマポ使うこと © 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
auto を使う 戻り値に利用 auto decoder = 8/8/2018 auto を使う 戻り値に利用 auto decoder = make_shared<BitmapDecoder^>(nullptr); データコレクションの取り出しにも利用 For (auto file : files) { auto photo = ref new Photo(file, ……); } 自動型推論 コードが読みやすくなる auto は至る所で使われている 通常の for や for_each より簡潔 © 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
型変換のオーバーヘッドを無くす ref クラス →Platform/Windows 名前空間などを使う std::vector を 8/8/2018 型変換のオーバーヘッドを無くす ref クラス →Platform/Windows 名前空間などを使う std::vector を Windows::Foundation::Collections::Vector^ で見たい! vector<AAA^> vec_a; b = ref new Vector<AAA^>(std::move( vec_a )); refクラス = Windows Rumtimeのクラス コピーは発生しない マーシャリング コストを最小限にする手法がとられている(つまり、言語の相互運用を意識している作り) ムーブ セマンティクス対応 © 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
.winmd 出力の内容を把握する ref クラス →public 前提 8/8/2018 .winmd 出力の内容を把握する ref クラス →public 前提 →public ref 型のメタデータは .winmd ファイルに出力 →ABI 境界を越えるデータ型ということ! 不要なものを公開しない ref クラスは相互運用が目的 ref クラスでガリガリ処理をさせたりしないこと © 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
他にもいろいろ… ref クラスのメソッドは決められたスレッドから呼び出す http://msdn.microsoft.com/ja-jp/library/windows/apps/jj160326.aspx ref クラスのメソッドは決められたスレッドから呼び出す public ref クラスのデストラクターは virtual としてマークする C++/CX がニーズを満たしていない場合は、WRL を使った、より深いレベルでの相互運用性を検討する C++/CX 言語拡張機能と C++/CLI を混同しない 内部型をパブリック ref クラスで公開しない スタック セマンティクスと RAII パターンを使う 必要以上に長い時間、オブジェクトを保持しない 循環参照を防ぐ
Visual C++ CompilerNovember 2013 CTP http://www.microsoft.com/en-us/download/details.aspx?id=41151 C++11追加対応 C++14対応 C++17(?)対応 WinVista/7/8/8.1 http://hilo.codeplex.com/
Let’s C++/CX Life ありがとうございました!