V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cnbatch
V2EX  ›  C++

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

  •  
  •   cnbatch · 187 天前 · 1971 次点击
    这是一个创建于 187 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 条附言  ·  187 天前
    发这帖子是想看看有没有办法,尽量避免把同一条语句写两遍
    4 条回复    2024-05-20 01:57:53 +08:00
    ysc3839
        1
    ysc3839  
       187 天前
    #ifdef __cplusplus
    cnbatch
        2
    cnbatch  
    OP
       187 天前
    @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
        3
    agagega  
       187 天前
    直接用 GCC 的__typeof__扩展(如果你确信只会用 GCC 或者 Clang 编译的话): https://gcc.gnu.org/onlinedocs/gcc/Typeof.html
    ysc3839
        4
    ysc3839  
       187 天前
    @cnbatch 个人觉得没必要精简,该怎么写就怎么写,甚至可以考虑分多文件然后 include
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2883 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 08:50 · PVG 16:50 · LAX 00:50 · JFK 03:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.