【发布时间】:2019-01-24 23:03:28
【问题描述】:
我来自 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++;
这样做的原因是我正在构建一个 ECS。我有一个EntityManager 结构,它应该包含组件数组。由于我计划将此作为通用用途,因此我定义了组件的上限 (MAX_COMPONENTS) 并有一个长度为 MAX_COMPONENTS 的 char*s 数组。在基本层面上,目标是让EntityManager 的用户能够定义自己的组件,并将它们存储在这些通用数组中。
如果有其他办法
谢谢大家的建议。
【问题讨论】:
-
为什么不使用
enum? -
宏还使用该类型的 sizeof 进行转换,所以如果我使用枚举,我将不得不做相反的事情:从数字索引中获取类型。我将编辑原始帖子以澄清。
-
“为类型分配数字”是什么意思?你能举一个例子来说明你如何在 C++ 中做到这一点吗?
-
您可以在同一个文件中定义您的类型,并使用
__LINE__(当前行号)作为唯一ID。你能告诉我们你想用 C 实现什么吗? -
这听起来像是XY problem。您正在尝试解决问题 X 并在您的脑海中找到不完整的解决方案 Y。当您的问题可能有另一个解决方案 Z 更适合 C 语言中可用的工具时,您现在正在询问有关 Y 的问题。请提供有关您尝试解决的原始问题 X 的更多信息。