前向声明类型定义

Forward-declare a typedef

本文关键字:定义 类型 声明      更新时间:2023-10-16

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

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

——myclass.h

namespace bl {
   class TypeA;
   class TypeB;
}
// Other stuff and myclass definition...
现在发现TypeATypeB不是类名,而是在自动生成的文件中定义为:
typedef SomeUnspecifiedClassName TypeA;
typedef AnotherUnspecifiedClassName TypeB;

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

如何向前声明一个类型定义?(不能使用c++11)

很简单,你不能。但是,如果您发布了您的特定情况,那么可能会有一些您想要做的变通方法。

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

我发现一个比较好的解决方案是创建一个简单的包装器类:

放置在头文件中:

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

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