casting - 如何识别函数参数的数据类型
问题描述
在许多情况下,我们将函数输入保留为 (void *) 并将其类型转换为函数内部所需的数据类型。但是有什么方法可以识别这个函数内部传递的变量的真实数据类型吗?
无效函数(无效* x);
在这里它可以接受多种类型的参数。如何识别传递给它的类型是什么?
解决方案
我假设您的代码是用 C 语言编写的(请澄清这一点,最好带有标签)。
不,没有办法做到这一点。void*
是一个原始内存指针,没有关于它指向什么的信息。您可以将其转换为 ANY 类型,但它可能无效(当试图以错误的方式解释时,它很可能会包含垃圾,这可能并且会导致进一步的问题)。
除非有必要使用,否则应始终尽量避免void*
使用,正是因为那 - 它可以规避代码中的所有类型检查,以及基于它构建的任何东西。
在不知道你的目标是什么的情况下,void*
我只能说不,没有办法恢复类型信息。如果没有void*
. 如果没有,因此您必须使用void*
,仍然有一个技巧来传递一些类型信息:将void*
指针与enum
将保存类型信息的结构一起捆绑在结构中。这可以工作,但需要一些样板代码,并且您必须小心实施它以避免出现问题。
推荐阅读
- powershell - 在需要它的计算机上推送许可证文件
- r - 根据分隔符提取文本但遗漏了缺失的条目
- google-picker - Google Picker Search 仅在父文件夹内
- electron - 如何在 Linux 上启动 Electron JS 构建?
- python - 修复一个循环后代码无响应的错误
- php - 尝试从站点中提取数据,适用于大多数但不适用于此
- tensorflow - 用于 tf 模型训练的自动化图像注释程序
- java - Spring - 从@Entity 类中的 application.yml 读取值
- python - Pytorch:当批量大小大于 1 时,如何绘制分割任务的预测输出?
- arm - 需要任何 ARM Cortex-M 程序员的建议