有没有办法为C中的类型分配唯一的编号?

mrF*_*les 5 c types

我来自C++背景,并且最近占用了C.我在为类型分配数字时遇到问题(反之亦然); 我需要的是一种为类型分配唯一ID的方法,最好是从0.我的目标是拥有一个基于传入类型索引数组的函数(或宏),我相信只有通过宏才能实现.

此外,由于我使用了sizeof()我需要传递的类型,因此enums难以使用替代方案.如果我将枚举器传递给函数/宏,那么我将不得不从数字中获取类型,完全相反(但可能更容易)的问题.

这在C中甚至可能吗?我已经尝试过研究这个问题,但是没有找到任何对这个问题的答案,特别是我能用C++做模板,如下所示:

int curTypeIdx = 0;

template <typename T>
struct TypeHandle {
    static int const val;
}

template <typename T>
int const TypeHandle<T>::val = curTypeIdx++;
Run Code Online (Sandbox Code Playgroud)

原因是我正在建立一个ECS.我有一个EntityManager结构,它应该包含组件数组.由于我计划这是通用的,我定义了components(MAX_COMPONENTS)的上限并且有一个char*长度为s的数组MAX_COMPONENTS.在基本层面,目标是让用户EntityManager能够定义自己的组件,并将它们存储在这些通用阵列中.

如果有任何其他方式

谢谢大家的任何建议.

Pav*_*ath 4

如果您可以一次枚举所有支持的类型(如果语言出现新类型,则更新列表),那么您可以使用 C 宏的字符串化功能和字符串数组来实现您想要的。

#define GET_TYPE_ID(type) get_type_id(#type)
const char *type_strings[] = { "char", "unsigned char", "short" /* so on.. */};

int get_type_id(const char* type_string) {
    for( int i = 0; i < sizeof(type_strings)/sizeof(const char*); i++) {
         if ( strcmp(type_string, type_strings[i]) == 0 ) return i;
    }
    // Should never reach here if you have taken care of all types and 
    // don't pass in illegal types.
}
Run Code Online (Sandbox Code Playgroud)

GET_TYPE_ID(int)现在您可以使用,GET_TYPE_ID(char)等获取每种类型的整数 ID 。