07内部クラステンプレート


内部クラステンプレート
テンプレートにテンプレートクラスをもう1つ埋め込む
内部クラス
名前の通り、内部クラスは1つのクラスを別のクラスの内部に定義します.内部クラスと外部クラス:何の関係もなく、相互に呼び出され、アクセスできません.
一般内部クラス宣言
class Outer
{
public:
    class Inner
    {
    public:
        int i;
        void print();
    };

public:
    void print();
    float o;
}

一般的な内部クラスのケース
using namespace std;
class Outer
{
public:
    class Inner
    {
    public:
        int i;
        void print();
    };

public:
    void print();
    float o;
}

void Outer::print()
{
    cout << "Outer" << endl;
}

void Outer::Inner::print()
{
    cout << "Inner" << endl;
}

void main()
{
    //   
    Outer o;
    o.print();
    //   
    Outer::Inner i;
    i.print();
}

テンプレート内部クラス宣言
using namespace std;
template <typename T1>
class Outer
{
public:
    template <typename T2>
    class Inner
    {
    public:
        T2 i;
        void print();
    };

public:
    void print();
    T1 o;
}

テンプレートの内部クラスのケース
using namespace std;
template <typename T1>
class Outer
{
public:
    template <typename T2>
    class Inner
    {
    public:
        T2 i;
        void print();
    };

public:
    void print();
    T1 o;
}

template <typename T1>
void Outer<T>::print()
{
    cout << "Outer" << endl;
}

//                    
template <typename T1>
template <typename T2>
void Outer<T1>::Inner<T2>::print()
{
    cout << "Inner" << endl;
}

void main()
{
    //   
    Outer<int> o;
    o.print();
    //   
    Outer<int>::Inner<float> i;
    i.print();
}