【问题标题】:Forward-declare a typedef前向声明一个 typedef
【发布时间】:2013-04-29 20:25:23
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

  • 我通过直接定义“未指定”类型来处理一些宏(实际上很多)。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    我发现有时有用的一个相对不错的解决方案是创建一个简单的包装类:

    放在头文件中:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-08
      • 2016-06-19
      • 2018-11-02
      • 1970-01-01
      • 2010-10-22
      • 1970-01-01
      • 1970-01-01
      • 2013-06-02
      相关资源
      最近更新 更多