前向声明类型定义
Forward-declare a typedef
我有一个大的头文件(~10000行),它是由一个脚本/程序自动生成的,我无法控制。
为了避免在类的声明中包含这个文件,我向前声明了我需要的几个类型:
——myclass.h
namespace bl {
class TypeA;
class TypeB;
}
// Other stuff and myclass definition...
现在发现TypeA
和TypeB
不是类名,而是在自动生成的文件中定义为:
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;
}
};
根据您的用例,这可能是您所需要的。
相关文章:
- 使用QJsEngine在Qt中注册自定义类型
- 在UE4中使用未定义类型'UTextBlock'
- 修改"std::set"中用户定义类型的值
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- QtQuick - qml:28:错误:未知方法返回类型:自定义类型
- 如何使自定义类型在unordered_map中用作键
- 在 C++20 中是否不再允许在 std 中对程序定义类型的函数模板进行专用化?
- Qt5 远程对象 + 自定义类型,但不在 POD 中
- 为什么转换函数声明不需要至少一个定义类型说明符
- 标准::原子中的自定义类型
- 如何使用自定义类型声明Arduino数组?
- 如何在 Cython 中定义返回 cpp 定义类型的函数?
- 使用自定义访问者时具有自定义类型的提升变体失败(源自 boost::static_visitor)
- 您可以将binary_search应用于具有自定义类型的矢量吗?
- 在自定义类型图中重用 SWIG 映射
- 扩展自定义类型的spdlog
- vim使用户定义类型的COLOR与C++中的基本类型相同
- 重载自定义类型的 std::to_string 和 std::to_chars?
- 具有未声明/未定义类型的 typedef 结构
- 函数重载:内置类型与用户定义类型