最終更新:2026-10-12
C++17 テンプレート auto 推論¶
C++はすべてautoに¶
C++17は、コードの表現力を高め、テンプレートコードの冗長性を減らすことを目指した多くの機能を導入しました。その中でも顕著な強化の1つが、autoキーワードで非型テンプレートパラメータを宣言できるようになったことです。この機能は、明示的な型宣言の必要性をなくすため、場面によっては特に便利です。以下では、私の仕事、すなわちデータベースの中でこの機能をどのように使っているかを紹介します!
実践から学びましょう。本節の完全なソースコードは星球にアップロードされます。興味があれば末尾のQRコードをご覧ください。
C++17でのautoによる非型テンプレートパラメータ¶
データベースの場面でのソート¶
データベースに関連するクラスFooを考えてみます。列挙型で表される特定の順序に従ってソートしたいとします:
異なるソート順を持つFooのインスタンスを持ちます:
以前の実装方法¶
C++17より前では、おそらくこのように実装していました:
しかし、コンパイラがテンプレートパラメータ'U'を推論できないため、これはエラーになる可能性があります。
現在の簡潔な方法¶
C++17以降では、非型テンプレートパラメータに対してautoキーワードを使って置き換えられます:
この方法はより簡単で、型を明示的に指定せずに非型テンプレートパラメータを使えます。
integral_constantの簡潔化¶
以前は、次のような方法でintegral_constantを実装していたかもしれません:
今はこれだけで済みます:
この簡潔化により、コードはより明快で読みやすくなります。
結論¶
C++17で導入された、非型テンプレートパラメータの宣言にautoキーワードを使う機能は、テンプレートコードを大幅に簡潔にしました。煩わしい型宣言をなくすことで、コードの意図をより直感的に表現でき、可読性と保守性が向上します。ソートなどの処理ではこの機能が特に役立ち、テンプレートパラメータの細部ではなく問題の本質に集中できるようになります。
関連トピック¶
- C++17 [[nodiscard]] 属性 | C++那些事
- C++17 std::string_view | C++那些事
- C++17 PMR メモリリソース | C++那些事
- C++17 17の高度な機能 | C++那些事
- C++17 クラステンプレートのテンプレート引数推論 CTAD | C++那些事
- C++17 optional_ref | C++那些事
- C++17 std::variant | C++那些事
- C++17 構造化束縛 | C++那些事
- C++17 変数テンプレート | C++那些事