我来自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能够定义自己的组件,并将它们存储在这些通用阵列中.
如果有任何其他方式
谢谢大家的任何建议.
如果您可以一次枚举所有支持的类型(如果语言出现新类型,则更新列表),那么您可以使用 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 。