C++ に於いて任意のコンテナ型のオブジェクトを受取り、そのなかの要素のひとつを返すようなテンプレート関数はどのように書けばよいでしょうか?
まず思い付くのは任意のコンテナ型がその中に格納している型を value_type という名前でメンバに持っていると仮定する方法です。
template<class T>
typename T::value_type point_up(const T &c) { /* 省略 */ }
コンテナというのが STL で用意されているものという前提であればこれで問題なく通用します。
ですが、ここで value_type というメンバを持っていると仮定できない場合にはどうすればよいでしょうか。
テンプレート・テンプレートを使う方法があります。
テンプレートを受取るテンプレートであることからテンプレート・テンプレートといいます。
template<template <class,class> class T, class V, class A>
V point_up(const T<V,A> &c) { /* 省略 */ }
ここでは詳細まで書くことはしませんが、テンプレートがテンプレートを受取れるというのは面白い機能でありメタプログラミングへの多彩な応用が可能であることを知っておくとよいでしょう。