背景
我正在致力于创建与数据建模语言的 C++ 绑定(bind)。其中一部分涉及读取一组类型定义并将其转换为 C++ typedef。目前,就我而言,大约有 100 个。
问题
在我正在阅读的文件中,类型定义未以任何方式排序。因此,我最终可能会将一个类型定义为另一个尚未定义的类型。
在 C++ 中,问题基本上是这样的:
typedef typeA typeB;
typedef typeC typeA;
typedef double typeC;
很明显这行不通,但是我可以以任何方式转发声明这些吗?
一个可能的解决方案当然是我在创建 C++ 文件之前处理这些定义:
typedef double typeC;
typedef typeC typeA;
typedef typeA typeB;
但我的问题仍然是,我可以转发声明 typedef 来完成这项工作吗?
最佳答案
不,typedef 不能被前向声明。
类类型、 union 类型和(C++11 起)枚举类型可以使用 class
进行前向声明。或struct
关键字,union
关键字,以及 enum
分别是关键字。例如
class Foo; // forward declaration
Foo* make_foo();
class Foo {
// ...
};
但是,即使您确定类型是类、 union 或枚举,typedef 也无法前向声明。例如,这将不起作用:
class Bar { /* ... */ };
class Foo;
typedef Bar Foo;
原因是前向声明 Foo
隐式声明它与稍后 class Foo { /* ... */ };
定义的类型相同定义,因此它与所有先前定义的类型不同,因此当您稍后说 typedef Bar Foo;
时,你这和你之前说的相矛盾。
关于c++ - 前向声明 typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39991359/