首页 > 解决方案 > 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__)

有任何想法吗?

标签: c

解决方案


您将要执行的操作可能行不通。但是您可以创建它的“轻量级”版本:

#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)

免责声明:我没有测试过它,但它可能会给你这个想法。


推荐阅读