gpt4 book ai didi

c++ - 前向声明 typedef

转载 作者:搜寻专家 更新时间:2023-10-31 02:14:24 25 4
gpt4 key购买 nike

背景

我正在致力于创建 C++ 绑定(bind)到数据建模语言。其中一部分涉及读取一组类型定义并将其转换为 C++ typdef。目前,就我而言,大约有 100 个。

问题

在我正在阅读的文件中,类型定义没有以任何方式排序。因此,我最终可能会将一种类型定义为另一种尚未定义的类型。

在 C++ 中,问题基本上是这样的:

typedef typeA typeB;
typedef typeC typeA;
typedef double typeC;

很明显这行不通,但我能以任何方式转发声明这些吗?

我当然可以在创建 C++ 文件之前处理这些定义:

typedef double typeC;
typedef typeC typeA;
typedef typeA typeB;

但我的问题仍然是,我可以转发声明 typdefs 以使其工作吗?

最佳答案

不,typedef 不能被前向声明。

类类型、 union 类型和(C++11 起)枚举类型可以使用 classstruct 关键字、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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com