Rom*_*her 3 c generics overloading c11
如何为c11 _Generic Functions添加额外的类型?
你需要#undef/re- #define吗?(如果有以下工作那样)或者有更好的方法吗?
#define to_str(X) _Generic((X), \
long double: ld_str, \
double: d_str, \
float: f_str, \
)(X)
#undef to_str
#define to_str(X) _Generic((X), \
long double: ld_str, \
double: d_str, \
float: f_str, \
int: i_str, \
)(X)
Run Code Online (Sandbox Code Playgroud)
我不确定我完全理解你的问题.你的意思是你有一个由某个库提供的类型通用宏,你想用你自己的新类型修改它?
你总是可以做的是给它另一个名字,并使用默认情况来获得提供的行为:
#define to_str2(X) _Generic((X), default: to_str(X), int: i_str(X))
Run Code Online (Sandbox Code Playgroud)
编辑:
这将无法正常工作,因为您必须将函数参数评估放在其中_Generic.这尤其意味着类型X必须与嵌套通用表达式的所有分支兼容.
如果有问题的库有一个只返回函数本身的宏,那么会更容易,没有(X),比如说to_strGen,而且永远不会评估X.然后你可以做到
#define to_str2Gen(X) _Generic((X), default: to_strGen(X), int: i_str)
#define to_str2(X) to_str2Gen(X)(X)
Run Code Online (Sandbox Code Playgroud)