【问题标题】:_Generic and functions with several parameters_泛型和具有多个参数的函数
【发布时间】:2013-05-07 12:46:50
【问题描述】:

我在 Wikipedia 上阅读了这个 C11 的 _Generic 示例:

#define cbrt(X) _Generic((X), long double: cbrtl, \
                          default: cbrt, \
                          float: cbrtf)(X)

似乎很清楚如何将它用于只有一个参数的函数,但我看不到用这个系统编写具有两个(或更多)泛型参数的函数的方法。怎么可能?

如果某些编译器支持此功能,我会尝试一些东西,但我也找不到,所以我无法找到有关如何做到这一点的任何想法。

【问题讨论】:

    标签: c generic-programming c11


    【解决方案1】:

    显然,这没有“通用”规则,它实际上取决于用例。但一个典型的用例是使用标准促销来确定一个常见的“超类型”

    #define pow(X, Y) _Generic((X)+(Y), long double: powl, \
                              default: pow,                \
                              float: powf)((X), (Y))
    

    如果在调用此宏时XY 在类型上不一致,那么窄的会自动提升为宽的。

    【讨论】:

    • 嗯,这很聪明。现在应该如何实现<tgmath.h> 函数?
    • 我认为这是想法之一,在语言内部有实现 tgmath.h 的方法。而且由于_Generic 不是可选的,即使没有tgmath.h,您也会知道如何实现它:)
    猜你喜欢
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    相关资源
    最近更新 更多