c/c++语言开发共享c11 _Generic添加类型

如何为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) 

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

    你总是可以做的是给它另一个免费精选名字大全,并使用默认情况来获得提供的行为:

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

    如果这是你的代码,你必须#undef它并重新#define它,是的。 无法扩展类型generics表达式(AFAIK)。

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

      以上就是c/c++开发分享c11 _Generic添加类型相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/541685.html

      (0)
      上一篇 2021年1月3日
      下一篇 2021年1月3日

      精彩推荐