首页 > 解决方案 > 根据是否设置定义选择某些 MACRO

问题描述

我有两个不同的宏可以运行,具体取决于是否设置了定义:

// Will do stuff later with the macroString
#define CASE_true(DEFINE, params) \
    auto macroString = std::to_string(DEFINE); \
    return true;

#define CASE_false(DEFINE, params) \
    return false;

我想要做的是使用定义变量名运行 CHOOSE_CASE 宏并展开相应的函数。

#define IS_DEFINED(x) IS_DEFINED2(x)
#define IS_DEFINED2(x) (#x[0] == 0 || (#x[0] >= '1' && #x[0] <= '9'))
    
#define CHOOSE_CASE(DEFINE, params) \
        CASE_##IS_DEFINED(DEFINE)##(DEFINE, params)

因此,如果在我的应用程序中有人写: #define MY_VAR 1,那么CASE_将扩展真情况并获得 的值MY_VAR,如果MY_VAR未设置/定义,CASE_则将扩展假情况并且不对定义做任何事情。这可能吗?MACRO 可能没有正确设置,IS_DEFINED但我不知道有什么方法可以让它工作。

标签: c++cc++11

解决方案


推荐阅读