我在设计实现中遇到了一些问题。大致是这样的:
我有一个模板基类,其中包含一个转换方法。
// 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,而Bar.h又包含了Foo.h(因为它是一个模板)。
哦,只是为了明确起见,所有头文件都使用了包含保护。
#ifndef _HEADER_NAME_H_
#define _HEADER_NAME_H_
...
#endif
其他人是如何解决类似的复杂问题的?
举个更具体的例子,比如我有一个数组类(Array class),它有一个将其转换为可读性较强的字符串(String class)的方法,例如toString()...然而,这个String类被声明为
class String : public Array<char> {...};
感谢您的提前帮助。 Gary。
template<typename T> class Foo : public IBaseClass { }
,并将IBaseClass
定义为一个纯虚基类。 - Skizz