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 分开处理了?
1
ysc3839 189 天前
#ifdef __cplusplus
|
2
cnbatch OP @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 虽然没毛病,但以后要改的话就要两个同时改,不是很方便 |
3
agagega 189 天前
直接用 GCC 的__typeof__扩展(如果你确信只会用 GCC 或者 Clang 编译的话): https://gcc.gnu.org/onlinedocs/gcc/Typeof.html
|