gpt4 book ai didi

c++ - 在其参数结构上重载 C/C++ 预处理器宏

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:22:42 26 4
gpt4 key购买 nike

我想写一个预处理器宏,如果它的参数是一个带括号的标记元组,它会做一件事,就像这样:

MY_MACRO((x, y))

如果它只是一个标记,还有其他东西,像这样:

MY_MACRO(x)

这可能吗?

如何区分以空格分隔的标记的数量,即区分 MY_MACRO(x)MY_MACRO(x y)

请注意,我并不是要根据参数的数量来重载 - 在所有情况下它都是一元宏。

编辑:如果有帮助,我愿意使用可变参数宏

最佳答案

关于您的第一个问题,以下宏可能会满足您的目的:

#define CONCAT_( x, y ) x ## y
#define CONCAT( x, y ) CONCAT_( x, y )
#define IS_SINGLE_1(...) 0
#define IGNORE(...)
#define IS_SINGLE_2_0 0 IGNORE(
#define IS_SINGLE_2_IS_SINGLE_1 1 IGNORE(
#define IS_SINGLE( x ) CONCAT( IS_SINGLE_2_, IS_SINGLE_1 x ) )
IS_SINGLE((x, y)) // 0
IS_SINGLE(x) // 1

IS_SINGLE 如果参数是单个标记,则扩展为 1,否则为 0。

希望对你有帮助

关于c++ - 在其参数结构上重载 C/C++ 预处理器宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5172435/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com