首页 > 解决方案 > 如何识别函数参数的数据类型

问题描述

在许多情况下,我们将函数输入保留为 (void *) 并将其类型转换为函数内部所需的数据类型。但是有什么方法可以识别这个函数内部传递的变量的真实数据类型吗?

无效函数(无效* x);

在这里它可以接受多种类型的参数。如何识别传递给它的类型是什么?

标签: castingtype-conversion

解决方案


我假设您的代码是用 C 语言编写的(请澄清这一点,最好带有标签)。

不,没有办法做到这一点。void*是一个原始内存指针,没有关于它指向什么的信息。您可以将其转换为 ANY 类型,但它可能无效(当试图以错误的方式解释时,它很可能会包含垃圾,这可能并且会导致进一步的问题)。

除非有必要使用,否则应始终尽量避免void*使用,正是因为那 - 它可以规避代码中的所有类型检查,以及基于它构建的任何东西。

在不知道你的目标是什么的情况下,void*我只能说不,没有办法恢复类型信息。如果没有void*. 如果没有,因此您必须使用void*,仍然有一个技巧来传递一些类型信息:将void*指针与enum将保存类型信息的结构一起捆绑在结构中。这可以工作,但需要一些样板代码,并且您必须小心实施它以避免出现问题。


推荐阅读