假设模板类A定义如下:
template <typename T>
class A
{
B<T> b;
};
假设模板类B定义如下:
template <typename T>
class B
{
A<T> a;
};
理想情况下,这些类将在带有内联实现的单独标头中定义。但是,这会导致循环包含问题。一种解决方案是将模板化类的实现放入cpp文件中。但是,这需要专门的模板实例化。
有没有办法保持内联类的实现并避免循环包含依赖?如果可能的话,我想避免使用指针。
谢谢,
萨姆
答案 0 :(得分:4)
转发声明你的类并使用标题保护(或非标准#pragma一次)。 http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.11
请注意,两个类不能完全包含彼此的对象。这将描述一个无限大小的物体......
http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.12