我正在为一个库编写接口,并且有很多看起来像这样的代码块:
result = library_function(arg1, arg2, arg3,...,argn);
printf("library_function result: %s", result_to_string(result));
我真的很想能够做更多类似的事情:
function_caller(&library_function, arg1, arg2, arg3,...,argn);
或者
function_caller(&library_function(arg1, arg2, arg3,...,argn));
我知道如何设置指向另一个函数的指针,但不知道如何解析未知数量的未知类型的参数。我可以通过类型转换来做到这一点,但是这比当前的情况更具吸引力,我承认这种情况并不可怕,只是看起来很丑陋。
叹气1。除非您知道参数类型,否则可以使用宏执行此操作。
#define function_caller(func, ...) do { \
result = func(__VA_ARGS__); \
printf("%s result: %s\n", #func, result_to_string(result)); \
} while (0)
您可以这样使用它:
function_caller(library_function, arg1, arg2, arg3, arg4);
还有其他方法可以执行此操作,但是它们非常不可移植。该宏需要C99。如今,无处不在的C99支持,但是尽管该标准已经过时,MSVC仍然缺乏C99支持。
1 “ Sigh”,因为我建议使用宏。通常应避免使用宏,并且宏可能导致难以阅读的代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句