
192
|
5 章 右辺値参照、ムーブセマンティクス、完全転送
std::string nameFromIdx(int idx); // as in Item 26
項目 26 と変わらず
void logAndAddImpl(int idx, std::true_type) // integral
{ // argument: look
logAndAdd(nameFromIdx(idx)); // up name and
} // call logAndAdd
// with it
汎整数実引数。検索し
た 名 前 を logAndAdd
に渡す
logAndAddImpl にインデックスから名前を検索させ、見付けた名前を logAndAdd へ渡させること
で(もう 1 つの logAndAddImpl オーバロードへ std::forward される)、2 つある logAndAddImpl
オーバロードの両方にログ出力するコードを記述しないで済みます。
この設計では、std::true_type、std::false_type という型が「タグ」になり、その目的は唯
一つ、目的のオーバロードに解決させることです。この仮引数には名前すら付けていない点にも注
目してください。実行時には何ら影響を与えず、実際タグを使用していないことをコンパイラが認
識し、最適化により実行ファイルから除去することを期待しています(一部のコンパイラは除去し
ます。少なくとも除去することがあります)。logAndAdd 内の、オーバロードされた関数の呼び出し ...