テンプレート・テンプレート・パラメータ

C++テンプレートテクニック 2-8

template<class T>
class CClass {
    T<int> m_x;
};
$ cl /W4 /EHsc main.cpp
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

main.cpp
main.cpp(6) : error C2059: 構文エラー : '<'
        main.cpp(7) : コンパイルされたクラスの テンプレート のインスタンス化 'CClass<T>' の参照を確認してください
main.cpp(6) : error C2238: ';' の前に無効なトークンがあります。

上記のように、テンプレートを利用した型の名前の部分だけをテンプレートとするような処理はコンパイルエラーとなる。

これを解決するために、class Tという型がテンプレートであることを明示する方法がある。

// テンプレート・テンプレート・パラメータ
template<template<class M> class T>
class CClass {
    T<int> m_x;
};

class Tはclass Mを受け取るテンプレートの型である、という宣言。



と、いう風に本を読んだ限りこう認識したけど考え方あってるかな・・・。