首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c11 _Generic添加类型

c11 _Generic添加类型
EN

Stack Overflow用户
提问于 2012-03-16 17:48:29
回答 2查看 1.7K关注 0票数 4

如何向c11 _Generic函数添加额外的类型?

你需要#undef/re-#来定义它吗?(如果是这样,下面的方法就行了)还是有更好的方法?

代码语言:javascript
复制
#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)
EN

回答 2

Stack Overflow用户

发布于 2012-03-16 19:10:18

我不确定我是否完全理解你的问题。你的意思是,你有一个类型宏,它是由某个库提供的,你想用你自己的新类型来修改它?

您总是可以为它指定另一个名称,并使用默认大小写来获取所提供的行为:

代码语言:javascript
复制
#define to_str2(X) _Generic((X), default: to_str(X), int: i_str(X))

编辑

这将不会完美地工作,因为您必须将函数参数求值放在_Generic中。这特别意味着X的类型必须与嵌套泛型表达式的所有分支兼容。

如果这个库有一个宏,它只返回函数本身,而没有(X),比如to_strGen,并且永远不会计算X,那会更容易。然后你可以这样做

代码语言:javascript
复制
#define to_str2Gen(X) _Generic((X), default: to_strGen(X), int: i_str)
#define to_str2(X) to_str2Gen(X)(X)
票数 8
EN

Stack Overflow用户

发布于 2012-03-16 19:20:40

如果这是你的代码,你将不得不#undef它和re#define它,是的。没有办法扩展类型泛型表达式(AFAIK)。

如果这不是你的代码,我会按照Jens的建议引入第二个带有扩展名的表达式。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9734982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档