4

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

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

--myclass.h

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

现在事实证明TypeAandTypeB不是类名,而是在自动生成的文件中定义为:

typedef SomeUnspecifiedClassName TypeA;
typedef AnotherUnspecifiedClassName TypeB;

SomeUnspecifiedClassName我的意思是我不能前向声明这个类型名称,因为它可能会在各种情况下发生变化。

如何前向声明 typedef?(不能使用 c++11)

4

3 回答 3

6

简单地说——你不能。但是,如果您发布您的具体情况,可能会有一些解决方法来解决您想要做的事情。

于 2013-04-29T20:28:06.620 回答
4

您可以编写一个脚本,从自动生成的源文件中...UnspecifedClassName的行中提取 。typedef然后,此脚本将成为您自己的自动生成的头文件的基础,该头文件将转发声明这些类以及您typedef对它们的语句。然后你的myclass.h文件可以#include是那个头文件。

于 2013-04-29T20:33:05.760 回答
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;
  }
};

根据您的用例,这可能就是您所需要的。

于 2014-07-20T09:33:23.377 回答