将typedef转发声明为原始类型

时间:2017-08-04 13:43:38

标签: c++ include typedef primitive forward-declaration

在我的文件中说我想做:

typedef vector<foo> foos

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

typedef int foo

#include foo typedef typedef vector<int> foosIdentityResource进入role的唯一选择?为了便于阅读和理解,我宁愿避免这两种选择。还有什么我可以做的吗?

2 个答案:

答案 0 :(得分:0)

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

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

它们通常无效*。

当尺寸正常时,您可以将数字转换为数字。

typedef void* foohandle;

reinterpret_cast<foohandle>(foo);

reinterpret_cast<int32_t>(foo handle);

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

答案 1 :(得分:0)

事实证明,您可以多次typedef class foo,仅而不是

  

声明后,只能重新声明typedef-name以再次引用相同的类型 [1]

因此,正如您使用foo转发声明typedef int foo 一样,如果它是某种类型,您也可以这样做:

typedef vector<foo> foos

然后你的typedef将编译正常。这不会违反Single Source of Truth的原则,因为编译器会强制所有CrossValidator匹配。如果您决定更改类型,但它还需要您编辑所有已定义的文件以进行匹配。