拥有
Bar.h
template<class T>
class Bar<T> {
//...
}
Foo.h
template<T>
class Bar<T>;
//#include "Bar.h" removed due of circular dependencies, I include it in .cpp file
template<class T>
class Foo {
...
private:
Bar<T> *_bar;
}
如您所见,我需要包含bar.h,但是由于循环依赖的原因,我无法在我的项目中添加它。.
因此,就像我通常所做的那样,我只是在.h中编写定义,并在.cpp中编写实现 但是我对这个示例有一些疑问,因为我不知道带有模板的类的语法。
这有语法吗? 我在当前示例中遇到以下编译器错误:
Bar is not a class template
答案 0 :(得分:0)
转发声明语法为
template<T> class Bar;
因此您的代码变为:
Foo.h
template<T> class Bar;
template<class T>
class Foo {
...
private:
Bar<T> *_bar;
};
#include "Foo.inl"
Foo.inl
#include "bar.h"
// Foo implementation ...
Bar.h
template<class T>
class Bar<T> {
//...
};
答案 1 :(得分:0)
您的示例没有循环依赖项。 Bar
完全不依赖Foo
。您可以按以下顺序定义模板:
template<class T> class Bar {};
template<class T>
class Foo {
private:
Bar<T> *_bar;
};
如果您希望将定义分成两个文件,则可以按以下方式实现上述顺序:
// bar:
template<class T>
class Bar {};
// foo:
#include "bar"
template<class T>
class Foo {
private:
Bar<T> *_bar;
};