LoginSignup
11
8

More than 5 years have passed since last update.

テンプレート・テンプレート

Posted at

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) { /* 省略 */ }

ここでは詳細まで書くことはしませんが、テンプレートがテンプレートを受取れるというのは面白い機能でありメタプログラミングへの多彩な応用が可能であることを知っておくとよいでしょう。

11
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
8