使用宏来拆分给定的参数

时间:2016-12-22 16:54:30

标签: c++ boost-preprocessor

假设我们有一个像这样的宏:

#define SOME_MACRO(a) ...do stuff

现在,以这种方式调用宏:

SOME_MACRO(argName=1)

它应该只返回给定参数的第一部分=(在这种情况下只是'argName')。可能吗? 提前谢谢

谢谢大家,这是我的全部问题: 我正在使用这个宏创建一个枚举和一个函数来将枚举值作为字符串:

#define RA_MAKE_ENUMERATOR_S1(r, data, elem) case elem : return BOOST_PP_STRINGIZE(elem);
#define RA_MAKE_ENUMERATOR(name, enumerators)                                   \
enum name                                                                   \
{                                                                           \
    BOOST_PP_SEQ_ENUM(enumerators)                                          \
};                                                                          \
                                                                            \
inline const std::string ValueToString(name v)                              \
{                                                                           \
    switch (v)                                                              \
    {                                                                       \
        BOOST_PP_SEQ_FOR_EACH(RA_MAKE_ENUMERATOR_S1, name, enumerators) \
    }                                                                       \
}   

RA_MAKE_ENUMERATOR(eTest, (ONE) (TWO))

这将输出以下代码:

enum eTest
{
    ONE, 
    TWO
}; 
inline const std::string ValueToString(eTest v)
{
    switch (v)
    {
         case ONE  : return "ONE"; 
         case TWO  : return "TWO";
    }
}

哪个是完美的。但是我想为ONE和TWO分配一个特定的值,如:

enum eTest
{
    ONE = 2, 
    TWO = 4
}; 

我尝试将宏调用为

RA_MAKE_ENUMERATOR(eTest, (ONE=2) (TWO=2))

枚举器没问题但当然ValueToString函数搞砸了

0 个答案:

没有答案