我有一个大的头文件(~10000行),这是由我控制的脚本/程序自动生成的。
为了避免在我的类的声明中包含这个文件,我转发声明了我需要的几种类型:
- myclass.h
namespace bl {
class TypeA;
class TypeB;
}
// Other stuff and myclass definition...
现在结果是TypeA
和TypeB
不是类名,而是在自动生成的文件中定义为:
typedef SomeUnspecifiedClassName TypeA;
typedef AnotherUnspecifiedClassName TypeB;
其中SomeUnspecifiedClassName
我的意思是我无法转发声明此类型名称,因为它可能会在各种情况下发生变化。
如何转发声明typedef? (不能使用c ++ 11)
答案 0 :(得分:6)
简单 - 你不能。但是,如果您发布了特定情况,可能会有一些解决方法可以解决您的问题。
答案 1 :(得分:4)
您可以编写一个脚本,从自动生成的源文件中的...UnspecifedClassName
行中提取typedef
。然后,此脚本将成为您自己生成的头文件的基础,该头文件将向您声明这些类以及typedef
语句。然后,您的myclass.h
文件可以#include
该头文件。
答案 2 :(得分:1)
我偶尔发现一个相对不错的解决方案是创建一个简单的包装类:
放在标题文件中:
class ClassA;
// now use pointers and references to ClassA at will
放入源文件:
#include <NastyThirdPartyHeader>
class ClassA: public TypeA {
public:
ClassA(TypeA const &x): TypeA(x) {}
ClassA &operator=(TypeA const &x) {
TypeA::operator=(x);
return *this;
}
};
根据您的使用情况,您可能只需要它。