在我的文件中说我想做:
typedef vector<foo> foos
如果foo
是另一个文件中的一个类,我可以转发声明:class foo
。但如果foo
本身就是原始的typedef
,我就不知道如何处理它。例如,在我做过的另一个文件中说:
typedef int foo
#include
foo
typedef
typedef vector<int> foos
是IdentityResource
进入role
的唯一选择?为了便于阅读和理解,我宁愿避免这两种选择。还有什么我可以做的吗?
答案 0 :(得分:0)
编译器必须知道分配类型的大小才能构建代码。
解决方案是使用Handles的语义,例如。
它们通常无效*。
当尺寸正常时,您可以将数字转换为数字。
typedef void* foohandle;
reinterpret_cast<foohandle>(foo);
reinterpret_cast<int32_t>(foo handle);
但更好的方法是使用句柄作为具体类型的指针。
答案 1 :(得分:0)
事实证明,您可以多次typedef
class foo
,仅c++而不是c:
声明后,只能重新声明typedef-name以再次引用相同的类型 [1]
因此,正如您使用foo
转发声明typedef int foo
一样,如果它是某种类型,您也可以这样做:
typedef vector<foo> foos
然后你的typedef
将编译正常。这不会违反Single Source of Truth的原则,因为编译器会强制所有CrossValidator
匹配。如果您决定更改类型,但它还需要您编辑所有已定义的文件以进行匹配。