如何在头文件中声明类模板(由于循环依赖关系)
how to declare class template in header file (due of circular dependencies)
拥有
酒吧
template<class T>
class Bar<T> {
//...
}
福.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
前向声明语法为
template<T> class Bar;
因此,您的代码变为:
福.h
template<T> class Bar;
template<class T>
class Foo {
...
private:
Bar<T> *_bar;
};
#include "Foo.inl"
福.inl
#include "bar.h"
// Foo implementation ...
酒吧
template<class T>
class Bar<T> {
//...
};
您的示例没有循环依赖项。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;
};
相关文章:
- 有没有办法重复循环循环?
- 相同的 for 循环适用于其他项目,但不适用于此项目。为什么?
- 将函数应用于特征矩阵中的所有元素,而无需循环
- C++参数类型以接受适用于基于范围的 for 循环的所有序列
- 虽然第三次循环循环,尽管在我眼中没有满足它的条件,因此打印了一个空字符串
- 为什么 OpenCL 嵌套循环仅适用于某些元素
- 避免以不同的迭代剂的循环循环避免几乎相同的代码重复
- 循环循环保存到数组,然后访问;
- 对于循环循环仅 3 次
- 处理媒体循环循环循环通过向量中的对象的各个方面
- 将C转换为循环循环循环
- Openmp-嵌套用于循环
- 有类似于循环(圆形)迭代器的东西吗?
- 关于如何正确循环循环并找到最小的价值,需要基本C 的帮助
- 我如何循环循环switch语句检查重新检查char?(C )
- 我是否必须求助于循环,以比较C 中的两个2D阵列
- 在嵌套循环/循环不变量中检查一次
- 对于作用于整数向量的循环行为异常
- "继续"使用标志作用于哪个循环?
- 为什么在这种情况下PPL明显慢于顺序循环和OpenMP