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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.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++ 在需要定义时避免循环类依赖 模板 结构B{ Tα; }; 结构A{ B foo(){ B结果; 返回结果; } };_C++_Templates - Fatal编程技术网

C++ 在需要定义时避免循环类依赖 模板 结构B{ Tα; }; 结构A{ B foo(){ B结果; 返回结果; } };

C++ 在需要定义时避免循环类依赖 模板 结构B{ Tα; }; 结构A{ B foo(){ B结果; 返回结果; } };,c++,templates,C++,Templates,如何避免使用模板(请注意默认参数以查看其用法)。 问题是这两个类都需要对方的定义。但是,正如模板解决方案所示,没有“真正的”循环依赖关系。您可以利用这样一个事实,即在按值返回的情况下,转发声明就足够了(就像a::foo的情况一样): 在DevStudio 2005中为我编译的很好。不要忘了模板是在使用时实例化的,而不是在声明时实例化的。是的,上面的工作是可行的。删除模板是不可行的。在测试过程中,我将foo实现保持在内联状态。我不认为这有什么关系。 template <class T=A&g

如何避免使用模板(请注意默认参数以查看其用法)。
问题是这两个类都需要对方的定义。但是,正如模板解决方案所示,没有“真正的”循环依赖关系。

您可以利用这样一个事实,即在按值返回的情况下,转发声明就足够了(就像
a::foo
的情况一样):


在DevStudio 2005中为我编译的很好。不要忘了模板是在使用时实例化的,而不是在声明时实例化的。是的,上面的工作是可行的。删除模板是不可行的。在测试过程中,我将foo实现保持在内联状态。我不认为这有什么关系。
template <class T=A>
struct B {
   T a;
};

struct A {
    B<A> foo(){
       B<A> result;
       return result;
    }
};
struct B;

struct A {
  B foo();
};

struct B {
  A a;
};

B A::foo() {
  B result;
  return result;
}