繁体   English   中英

我可以使用 typedef 转发声明在别处定义的类型吗

[英]Can I forward declare a type defined elsewhere with typedef

我知道我可以转发声明在另一个头文件中定义的类或结构(我不想包含)。 我正在尝试使用由 typedef 指定的普通旧数据类型来做同样的事情。

class foo; // defined in foo.h
struct bar; // defined in bar.h
typedef baz; // defined in baz.h

void Crunch(foo& a, bar& b, baz& c);

显然,上面的代码不能编译( error: 'baz' does not name a type ),如果该行被删除,编译将失败并error: 'baz' has not been declared 如果我在上面的示例中将单词typedef更改为using ,则expected nested-name-specifier before 'baz'错误。

是否有一些等效于向前声明类型baz

你不能这样做,因为什么都可以用一个类型来完成不知道那种类型的它是什么。 特别是, baz可能是一个函数类型,在这种情况下const bazbaz是相同的类型(影响重载解析),或者它可能是一个左值引用类型,在这种情况下, baz&baz&&都是相同的类型. 它可能是volatile voidint () && ,在这种情况下baz&不存在。 该语言根本不支持这种级别的“完全不完整的类型”。

可以想象一个声明说“这是一些未指定的对象类型”,但是有些平台对charint使用不同的寻址约定,因此如果我们希望能够使用指针或对这种未知类型的引用。 (这不适用于类类型,其对应的指针类型被指定为行为相似。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM