読者です 読者をやめる 読者になる 読者になる

Tamflexの貯蔵庫

やる気のない備忘録

テンプレートクラスTの内部クラスを呼び出す

language language-c++11

共通の内部クラスを持っている複数のクラスをつくって、テンプレートからそれを呼び出したいことがあるかもしれません。その時は以下のように書けばうまく動くでしょう。

#include <iostream>

using namespace std;

class A1
{
public:
  struct Param
  {
    Param(){cout << "A1" << endl;};
    void print(){cout << "Hello" << endl;};
  };
};

class A2
{
public:
  struct Param
  {
    Param(){cout << "A2" << endl;};
    void print(){cout << "World" << endl;};
  };
};

template <class T>
class B
{
private:
  typedef typename T::Param TParam;
  TParam* x;
public:
  B()
  {
    x = new TParam;
    x->print();
  };
};

int main()
{
  B<A1>* b1;
  b1 = new B<A1>;
  B<A2>* b2;
  b2 = new B<A2>;
  return 0;
}

それぞれ同じParamというクラスをもったA1,A2というクラスを候補とするテンプレートクラスBを作る状況です。
この時 typename T::Paramという型の変数を使うことができます。