GCC 在运行时确定 void* 的类型
我正在开发一个通用容器,其中使用 void* 保存数据,我知道在 C 中无法在运行时确定 void* 的类型。我想知道是否可以使用 gcc 来做到这一点扩展或任何其他技巧?我只需要确定我的类型和任何其他类型,我的一个函数需要确定它是否传递给我的容器或任何其他类型,如果它是一个容器,则执行其他操作不执行任何操作。
I am working on a generic container where data is held using a void*, I know that there is no way to determine the type of void* at runtime in C. What I was wondering is that is it possible to do it using a gcc extension or any other trick? I only need to determine between my type and any other type, one function of mine needs to determine if it is passed a container of mine or any other type if it is a container do something else do nothing.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
处理此问题的一种方法是向函数添加一个附加参数。另一种方法是将您的
void *
封装在一个结构中,该结构会带来一些类型数据。编译器很可能无法在这里为您提供帮助。One way to handle this is with an additional argument to the function. Another is to encapsulate your
void *
in a struct that brings some type data along for the ride. The compiler most likely won't be able to help you here.您可以实现自定义 RTTI 系统,例如:
You could implement a custom RTTI system, like:
一种方法是将数据类型的所有实例放入哈希表中,然后查找 arg 是否在表中。另一种方法是从连续的内存区域分配数据类型的所有实例,并检查 arg 以查看它是否在该区域中——早期的 LISP 解释器就是这样工作的。否则,将标志传递给例程,或调用两个不同的例程。
One way is to put all instances of your data type in a hash table and do a lookup to see if the arg is in the table. Another way is to allocate all instances of your data type from a contiguous area of memory and check the arg to see if it's in that area -- early LISP interpreters worked that way. Otherwise, pass a flag to the routine, or call two different routines.