转发声明一个typedef

时间:2013-04-29 20:25:24

标签: c++ forward-declaration c++03

我有一个大的头文件(~10000行),这是由我控制的脚本/程序自动生成的。

为了避免在我的类的声明中包含这个文件,我转发声明了我需要的几种类型:

- myclass.h

namespace bl {
   class TypeA;
   class TypeB;
}
// Other stuff and myclass definition...

现在结果是TypeATypeB不是类名,而是在自动生成的文件中定义为:

typedef SomeUnspecifiedClassName TypeA;
typedef AnotherUnspecifiedClassName TypeB;

其中SomeUnspecifiedClassName我的意思是我无法转发声明此类型名称,因为它可能会在各种情况下发生变化。

如何转发声明typedef? (不能使用c ++ 11)

3 个答案:

答案 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;
  }
};

根据您的使用情况,您可能只需要它。