Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 包含自身实例化的模板,C+中的递归+;_C++_Templates_Recursion - Fatal编程技术网

C++ 包含自身实例化的模板,C+中的递归+;

C++ 包含自身实例化的模板,C+中的递归+;,c++,templates,recursion,C++,Templates,Recursion,非常简单的问题,假设我有一个模板: template <class T> class foo { private: T SubFoo; ... }; 模板 福班{ 私人: T subfo; ... }; 然后我有一些事情,比如: foo < foo < int > > myFoo; foomyFoo; 这很好用。在本例中,myFoo将有一个名为myFoo.subfo的成员,其类型为foo 我希望在myFoo.SubFoo中有一个指向m

非常简单的问题,假设我有一个模板:

template <class T>
class foo {

 private:
   T SubFoo;
  ...

};
模板
福班{
私人:
T subfo;
...
};
然后我有一些事情,比如:

 foo < foo < int > > myFoo;
foo>myFoo;
这很好用。在本例中,myFoo将有一个名为myFoo.subfo的成员,其类型为
foo

我希望在myFoo.SubFoo中有一个指向myFoo的指针。我不知道如何正确地调用它,subfo的类成员指针指向整个母类myFoo。这可能吗?我试图包括以下声明:

template <class T>
class foo {

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

};
模板
福班{
私人:
...
T subfo;
foo*母亲;
...
};
但这似乎不起作用

一般来说,我所做的是建立一个递归结构。在递归中传递通信很容易,但我发现“向上”很困难。也许我一开始就设计错了

非常感谢

(代替注释)这在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;
}
模板
结构foo{
T subfo;
foo*母亲;
};
富富实例;
foo foo_foo_实例;
int main()
{
p2mother=&foo\u foo\u instance;
}
更一般的情况(这适用于g++):

模板
结构foo{
//...
T subfo;
傅*母亲;
//...
};
foosimple;
foo>复合体;
int main(){
simple.p2母亲=&simple;
complex.p2母亲=&complex;
}

但这似乎不起作用。。但是它。你在努力实现什么?问题是什么?为什么它不起作用?这似乎对我有用(至少在VS2010中是这样)你有没有试着写
foo*p2内部foo类声明?似乎您不打算接受任何答案,所以不打算对任何答案进行投票:(对不起什么?我确实接受了他们并对他们进行了投票。你是什么意思?似乎你是对的。我一次又一次地遇到编译错误,现在它消失了。我不知道我在做什么……非常感谢。
template <class T>
struct foo {

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

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

int main() {

  simple.p2mother = &simple;
  complex.p2mother = &complex;
}