実践C++応用講座
第11回 decltypeとstd::declval
2017年12月11日 実践C++応用講座
こんにちは。田原です。 今回は、ちょっと複雑なテンプレートを書く時に便利なdecltypeとstd::declvalです。decltypは既にちらほらつかってますが受け取った式の型を返します。declvalはその逆っぽい …
第10回 メンバの有無を判定するテンプレート
2017年12月3日 実践C++応用講座
こんにちは。田原です。 前回までで テンプレートの明示的特殊化と部分的特殊化とオーバーロード(まとめて表現できる言葉が欲しいですね)を使って必要に応じて異なるテンプレートを定義する方法を解説しました。今回はその応用を1つ …
第9回 部分特殊化チックな関数テンプレートのオーバーロード
2017年11月26日 実践C++応用講座
こんにちは。田原です。 前回はクラス・テンプレートの少し高度な部分特殊化の方法を解説しました。今回はこれの関数テンプレート版を解説します。とは言っても関数テンプレートには部分特殊化はありません。その代わりオーバーロードが …
第8回 長い長い部分的特殊化をエイリアス・テンプレートでちょっと短く
2017年11月19日 実践C++応用講座
こんにちは。田原です。 前回はクラス・テンプレートの部分特殊化で複雑な指定を行うための原理的な話を解説しました。うまく組み合わせることで多少複雑な処理でも記述できます。しかもコンパイル時処理なので超高速(実行時間が0)で …
第7回 部分的特殊化で便利な標準ライブラリの仕組みとその使用例
2017年11月12日 実践C++応用講座
こんにちは、田原です。 前回は部分的特殊化する際によく使われる部品と、それらを使った部分特殊化の例を1つ上げました。そして、実はC++11以降、標準ライブラリ<type_traits>で非常に多数の便利な部品 …
第6回 部分的特殊化で良く使う部品とSFINAEの利用方法
2017年11月5日 実践C++応用講座
こんにちは。田原です。 クラス・テンプレートの部分特殊化や関数テンプレートのオーバーロードはある程度範囲の型に対してテンプレートを定義します。その「範囲」をかなり自由に指定することができます。今回はそれによく使われる幾つ …
第5回 部分的特殊化とオーバーロード
2017年10月29日 実践C++応用講座
こんにちは。田原です。 前回は明示的特殊化を解説しました。明示的特殊化(完全特殊化)は型を確定してプライマリー・テンプレートとは異なる振る舞いを定義する機能でした。部分的特殊化は対応する型を完全に決めるのではなく、ある程 …
第4回 明示的特殊化とテンプレート用語の解説
2017年10月22日 実践C++応用講座
こんにちは。田原です。 前回は明示的実体化について解説しました。今回は明示的特殊化について解説します。ちょっと似た用語ですので混乱しないようにして下さい。「実体化」と「特殊化」の違いです。またC++規格書は「特殊化」とい …
第3回 分割コンパイルとテンプレートの「明示的」実体化
2017年10月15日 実践C++応用講座
こんにちは。田原です。 前回、前々回とテンプレートは通常は暗黙的に実体化される話をしました。マクロでクラス・テンプレートっぽいことをする場合は「明示的実体化のようなもの」が必要ですが、テンプレートでは省略できます。しかし …
第2回目 関数テンプレートの基本
2017年10月8日 実践C++応用講座
こんにちは。田原です。 前回クラス・テンプレートの基礎を解説しました。今回はもう一つのテンプレート、関数テンプレートの基本について解説します。クラス・テンプレートも同様ですが基本的な使い方は簡単です。そして、テンプレート …