C23 和 C++同时用的头文件, decltype 的部份应该使用 typeof 还是 macro 换个壳?

218 天前
 cnbatch

C++11 有decltype,C23 有typeof,如果同一个头文件需要同时给 C23 和 C++使用,那么需要自动推导类型的语句应该怎么选?

是应该加设一个 macro 分开处理?对于 C23 就用 typeof ,对于 C++就用 decltype 。
又或者在 C23 环境用#define把 decltype 替换成 typeof ?

然后还有typeof_unqual,C++是用模板的形式来做的,没记错的话应该等价于std::remove_cv_t<decltype(var)>,是不是只能用 macro 分开处理了?

2007 次点击
所在节点    C++
4 条回复
ysc3839
218 天前
#ifdef __cplusplus
cnbatch
218 天前
@ysc3839 肯定会用到这条,主要是,后边的写法如何尽量精简

比如
#ifdef __cplusplus
THIS_IS_MACRO(x, y) call_function(x, decltype(x)y)
#else
THIS_IS_MACRO(x, y) call_function(x, typeof(x)y)
#endif

虽然没毛病,但以后要改的话就要两个同时改,不是很方便
agagega
218 天前
直接用 GCC 的__typeof__扩展(如果你确信只会用 GCC 或者 Clang 编译的话): https://gcc.gnu.org/onlinedocs/gcc/Typeof.html
ysc3839
218 天前
@cnbatch 个人觉得没必要精简,该怎么写就怎么写,甚至可以考虑分多文件然后 include

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1042088

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX