如何向c11 _Generic函数添加额外的类型?
你需要#undef/re-#来定义它吗?(如果是这样,下面的方法就行了)还是有更好的方法?
#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)发布于 2012-03-16 19:10:18
我不确定我是否完全理解你的问题。你的意思是,你有一个类型宏,它是由某个库提供的,你想用你自己的新类型来修改它?
您总是可以为它指定另一个名称,并使用默认大小写来获取所提供的行为:
#define to_str2(X) _Generic((X), default: to_str(X), int: i_str(X))编辑
这将不会完美地工作,因为您必须将函数参数求值放在_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)发布于 2012-03-16 19:20:40
如果这是你的代码,你将不得不#undef它和re#define它,是的。没有办法扩展类型泛型表达式(AFAIK)。
如果这不是你的代码,我会按照Jens的建议引入第二个带有扩展名的表达式。
https://stackoverflow.com/questions/9734982
复制相似问题