[英]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 baz
和baz
是相同的类型(影响重载解析),或者它可能是一个左值引用类型,在这种情况下, baz&
和baz&&
都是相同的类型. 它可能是volatile void
或int () &&
,在这种情况下baz&
不存在。 该语言根本不支持这种级别的“完全不完整的类型”。
可以想象一个声明说“这是一些未指定的对象类型”,但是有些平台对char
和int
使用不同的寻址约定,因此如果我们希望能够使用指针或对这种未知类型的引用。 (这不适用于类类型,其对应的指针类型被指定为行为相似。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.