背景:我正在开发一个基于现有 Java 类模型生成 C++ 代码的框架。出于这个原因,我无法更改下面提到的循环依赖。
鉴于:
- 父子类关系
- Parent 包含一个 Children 列表
- 用户必须能够在运行时查找列表元素类型
我在以下测试用例中对此进行了建模:
主文件
#include "Parent.h"
#include <iostream>
using std::cout;
using std::endl;
int main(int argc, char* argv[])
{
Parent parent;
cout << Parent::getType() << endl;
cout << parent.getChildren().getType() << endl;
return 0;
}
父.h
#ifndef PARENT_H
#define PARENT_H
#include <string>
#include "Array.h"
class Child;
class Parent
{
public:
Array<Child> getChildren()
{
return Array<Child>();
}
static std::string getType()
{
return "parent";
}
};
#endif
孩子.h
#ifndef CHILD_H
#define CHILD_H
#include "Parent.h"
class Child: public Parent
{
};
#endif
数组.h
template <typename ElementType>
class Array
{
public:
static std::string getType()
{
return ElementType::getType();
}
};
当我编译上面的代码时,我得到
error C2027: use of undefined type 'Child'
:return ElementType::getType();
如果我尝试
#include "Child.h"
而不是前向声明,我会得到error C2504: 'Parent' : base class undefined
:class Child: public Parent
如果我尝试
Array<Child*>
而不是Array<Child>
得到error C2825: 'ElementType': must be a class or namespace when followed by '::'
:return ElementType::getType();
循环依赖的产生是因为:
- Child.h 需要了解 Parent 类
- Parent.h 需要了解类 Array
- Array.h 需要了解 Child 类
有任何想法吗?