c - 是否可以检测到 C 结构有一个字段?
问题描述
如果结构有成员,我需要在编译时通过宏检测。我已经尝试过offsetof(struct object, a_field)
,但它会导致在编译时发出关于不存在字段的错误。是否有其他方法可以检查 C 结构是否有字段?
我需要这个作为宏
MESSAGE(obj, method, ...) obj->method(obj, ##__VA_ARGS);
这样我也可以在非虚拟方法上使用它,例如:
MESSAGE(obj, method, ...) method(obj, ##__VA_ARGS);
因此,通常要检测是否存在method
成员,如果有,则将其称为 asobj->member(obj, …)
和 as member(obj, …)
else。
解决方案
类型在编译时是已知的。这意味着您不能使用尚未在此类结构中声明的结构字段。您可以使用该字段,如果此类结构的提供者未正确声明该字段,则编译器会出错,但无法有条件地检查它。
推荐阅读
- ios - 使用 Alamofire 快速解析 JSON 时获取 nil 值
- python-3.x - 如何在 Python 3.7.x 中使用 list[customClass] 作为带有 @dataclass 的类型
- reactjs - 我添加了 webpack-server 在运行 npm start 时仍然显示此错误
- angular - Angular 2中的自动完成在选择后在输入框中显示id而不是名称
- angular - 日期列排序在 Primeng 中不起作用
- java - 在 Spring Container 中,@Autowire 如何跟踪在 setter 方法中注入的依赖项
- node.js - 有没有一种方法可以比 .populate() 更有效地验证 mongoose 中的相关文档并将其聚合在一起
- sql - 如何通过另一个表设置唯一键检查
- javascript - "IndexOf" function in ReactJS doesn't work like the vanilla JS approach
- java - 获取 ul 中 li 元素的数量而不存储在列表中