3

非常に簡単な質問です。テンプレートがあるとしましょう:

template <class T>
class foo {

 private:
   T SubFoo;
  ...

};

そして、私は次のようなものを持っています:

 foo < foo < int > > myFoo;

これは正常に動作します。この場合、 myFoo には myFoo.SubFoo という名前のメンバーがあり、タイプはfoo < int >です。

myFoo.SubFoo に myFoo を指すポインターが必要です。これを適切に呼び出す方法がわかりません。これは、母クラス myFoo 全体を指す SubFoo のクラスメンバー ポインターです。これは可能ですか?私は宣言を含めようとしました:

template <class T>
class foo {

 private:
  ...
   T SubFoo;
   foo< foo < T > >* p2mother; 
  ...

};

しかし、これはうまくいかないようです。

一般的に、私がやっていることは再帰構造を設定することです。通信を再帰に渡すのは非常に簡単ですが、「上に」行くのに問題があります。そもそもこれを間違って設計しているのかもしれません。

どうもありがとう!

4

2 に答える 2

1

より一般的なケース (これは g++ で機能します):

template <class T>
struct foo {

 //...
 T SubFoo;
 foo* p2mother; 
 //...
};

foo< int > simple;
foo< foo< int > > complex;

int main() {

  simple.p2mother = &simple;
  complex.p2mother = &complex;
}
于 2012-04-23T10:27:43.853 に答える
0

(コメントの代わりに)これはVS2010、gcc-4.3.4で機能します

template <class T>
struct foo {
   T SubFoo;
   foo< foo < T > >* p2mother; 
};

foo<int> foo_instance;

foo<foo<int> > foo_foo_instance;

int main()
{
  foo_instance.p2mother= &foo_foo_instance;
}
于 2012-04-23T10:23:33.780 に答える