6

宿題の場合、リンクリストを作成する必要があり、それはテンプレートクラスである必要があります。割り当てでは、Listと呼ばれる1つのテンプレートクラスと、Linkと呼ばれる別のネストされたテンプレートクラスが必要です。

メソッドは、クラス定義の外部で定義する必要があります。

最初に簡単なバージョンの割り当てを作成しましたが、機能していますが、デザインにエラーがあるように感じます。

#include <iostream>
using namespace std;

template <class T1>
class A
{
public:
  template <class T2>
  class B;

  T1    _a;
};

template <class T1>
template <class T2>
class A<T1>::B
{
public:
  T2 _b;
};

int main()
{
  A<int> a;
  a._a = 5;

  A<int>::B<int> b;
  b._b = 10;

  cout << a._a << " " << b._b << "\n";


  return 0;
}

私の主な質問は、ステートメントからわかるように、ネストされたクラスは同じタイプになるので、A<int>::B<int> b;クラスBを自動的にAと同じタイプにする方法はありますか?私の質問は意味がありますか?つまり、A<int>::B b;Aと同じタイプを自動的に実行してbすることはできますか?A<double>::B<int>;たとえば、私がそうするような状況は決してありません。

4

2 に答える 2

7

はい、Bテンプレートを作成しないでください。T1B定義では、まだのテンプレート引数を参照していますA

template <class T1>
class A
{
public:
  class B;

  T1    _a;
}

さて、の代わりにA<int>::B<int>、それは単にA<int>::Bです。

List<int>::Link<double>とにかく意味がないので、テンプレートであっても意味がありません。

于 2012-04-20T16:35:39.587 に答える
1

内部クラスのテンプレートが必要だと思う理由がわかりません。非テンプレートクラスとして宣言してみましたか?例えば

template <class T1>
class A
{
public:
  class B;
private:    
  T1    _a;
};

template <class T1>
class A<T1>::B
{
  T1 _b;
};

(また、これは単なる例であることに気づきますが、公開データメンバーを使用してクラスを作成することはお勧めしません)

于 2012-04-20T16:37:50.400 に答える