我在解决设计实现中的一些问题时遇到了麻烦。它是这样的:
我有一个模板基类,它有一个转换方法。
// Foo.h
class Bar;
template<typename T>
class Foo {
virtual const Bar toBar();
}
我希望派生类 Bar 从特定形式的 Foo 继承,例如:
// Bar.h
class Bar : public Foo<float> {
// Insert Bar methods here, Etc.
}
由于 Foo 是一个模板,因此必须在头文件中完全定义实现,这会导致实现 toBar() 方法需要能够创建 Bar 类型的实例的问题。所以这告诉我我需要在 Foo 定义之后但在 Foo 实现之前包含 Bar.h 头文件。
但是,在 Bar.h 中,类 Bar 派生自 Foo,因此必须提供 Foo 的完整定义。这会导致问题,因为这两个文件具有无法通过前向声明解决的循环依赖关系,因为前向声明是派生类。
如果另一个类 SomeClass 有一个 Bar 类型的数据成员,这将变得更加复杂,因为这需要包括 Bar.h,其中包括 Foo.h(因为它是模板)包括 Bar.h。
哦,只是要清楚所有的头文件都有包含保护使用
#ifndef _HEADER_NAME_H_
#define _HEADER_NAME_H_
...
#endif
其他人是如何解决此类复杂问题的?
作为一个更具体的例子,我有一个 Array 类,它有一个方法可以将它转换为人类可读的 String 类,例如 toString() ......但是 String 类被声明为
class String : public Array<char> {...};
提前致谢。加里。