c - C宏中的可变参数函数转换
问题描述
我想将此代码块放入 C 宏中:
void* instance = frm_config_get_instance("inside");
int (*func)(void* inst, double value) = frm_config_get_function("comp123_work2");
int res = func(instance, 0);
所以我可以这样使用它:
res = FRM_CONFIG_CALL("inside", "comp123_work2", 0.0)
到目前为止,这是我能想到的:
#define FRM_CONFIG_CALL(instance, function, ...) \
((int*)(void*, __VA_ARGS__))frm_config_get_function(function) \
(frm_config_get_instance(instance), __VA_ARGS__)
有任何想法吗?
解决方案
您将要执行的操作可能行不通。但是您可以创建它的“轻量级”版本:
#define FRM_CONFIG_FUNC(function, ...) \
((int(*)(void*, __VA_ARGS__))frm_config_get_function(function))
#define FRM_CONFIG_CALL(func, instance, ...) \
(func)(frm_config_get_instance(instance), __VA_ARGS__)
并像使用它一样
res = FRM_CONFIG_CALL(FRM_CONFIG_FUNC("comp123_work2", double), "inside", 0.0)
免责声明:我没有测试过它,但它可能会给你这个想法。
推荐阅读
- c# - 检测代码克隆在 Visual Studio 2019 中不可用
- javascript - CSS子组件的边框在父组件的边框之上
- swift - 使用 AVAudioPlayer 从包含 utf8 编码字符串的 URL 流式传输音频
- python - 有没有办法一次查找超过 100 个推特状态或查找非常大的数据集的状态?
- amazon-web-services - Electron-Updater 和 AWS S3 存储桶策略 - 错误:HttpError: 403 Forbidden
- html - if 语句以防函数失败
- angular - 如何在Angular 8中将动态数据从父级传递给子级ng-content
- mocha.js - 赛普拉斯如何断言控制台被称为 x 长度的数组?
- python - 如何修复:“错误”:“预测失败:未知错误。” 在 scikit-learn 的自定义预测例程中?
- powershell - PowerShell:关闭标准输出句柄