将 typedef 转发声明到原始类型

Forward Declaration of a typedef to a Primitive Type

在我的文件中说我想做的事情:

typedef vector<foo> foos

如果 foo 是另一个文件中的 class,我可以转发声明:class foo。但是,如果 foo 本身就是原语的 typedef,我不知道该如何处理。例如,在我完成的另一个文件中说:

typedef int foo

我唯一的选择是 #include 文件 footypedef 中,还是 typedef vector<int> foos?为了可读性和关​​联性,我宁愿避免这两种选择。还有什么我可以做的吗?

编译器必须知道分配类型的大小才能构建代码。

解决方案是使用句柄的语义,例如。

它们通常是无效的*。

当大小合适时,您可以将它们转换为数字。

typedef void* foohandle;

reinterpret_cast<foohandle>(foo);

reinterpret_cast<int32_t>(foo handle);

但更好的做法是使用句柄作为具体类型的指针。

事实证明,您可以在 only, not in :

中多次执行相同的操作 typedef

Once declared, a typedef-name may only be redeclared to refer to the same type again [1]

因此,就像您使用 class foo 转发声明 foo 一样,如果它是一种类型,您也可以这样做:

typedef int foo

那么你的 typedef vector<foo> foos 就可以正常编译了。这不会违反 Single Source of Truth 的原则,因为编译器会强制所有 typedef 匹配。如果您决定更改类型,那么您还需要编辑所有定义它的文件以匹配。