提前声明一个typedef

4

我有一个大型的头文件(约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)


你能通过引用和指针使用这个类吗?https://dev59.com/JXRB5IYBdhLWcg3wro6B - user195488
你在最后一句话中的具体问题已经在第一个相关问题中得到了回答: https://dev59.com/l3RA5IYBdhLWcg3w2xsI?rq=1 - jxh
根据 TypeATypeB 的使用情况,您可以考虑将 myclass 重构为一个模板。 - jxh
3个回答

6

简单来说,你不能这样做。不过,如果你发布你的具体情况,可能会有一些解决方法。


我曾经使用一些宏(实际上很多),通过直接对“未指定”类型进行typedef来解决问题。 - sbabbi

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

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

根据您的使用情况,这可能是您所需的全部内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接