バッファー用途などでcharに限定したコンテナを用いたい場合がある。
テンプレート テンプレート パラメータを用いる。
templateが入れ子になっているがこれをtemplate template parameterという。
この宣言ではContainerは【TとAの2種類のテンプレート引数をもつテンプレート型】であり既定ではvectorであるとしている。
【(TとAをテンプレート引数とする)Containerというテンプレート引数を持つReadという関数】で関数にTはかかっていない。
すなわち、関数テンプレートのテンプレート引数はContainer一つだけであり、テンプレート引数を2つもつテンプレート型を指定する必要がある。
よって要素型をcharに固定した任意のコンテナに対する関数やクラスが記述できる。
テンプレート テンプレート パラメータを用いる。
template <template <typename T, typename A = std::allocator<T>> class Container = std::vector> Container<char> Read() { Container<char> reply; ... return reply; } std::vector<char> reply = Read(); std::deque<char> reply = Read<std::deque>();
templateが入れ子になっているがこれをtemplate template parameterという。
この宣言ではContainerは【TとAの2種類のテンプレート引数をもつテンプレート型】であり既定ではvectorであるとしている。
【(TとAをテンプレート引数とする)Containerというテンプレート引数を持つReadという関数】で関数にTはかかっていない。
すなわち、関数テンプレートのテンプレート引数はContainer一つだけであり、テンプレート引数を2つもつテンプレート型を指定する必要がある。
Read<std::vector<int>>(); // error
よって要素型をcharに固定した任意のコンテナに対する関数やクラスが記述できる。
タグ
コメントをかく