C ++ Test宏定义的类型信息值

时间:2015-02-25 20:06:10

标签: c++ c macros c-preprocessor

我有一个像这样的宏:

#define MYDEFINE classX

它可能是

#define MYDEFINE classY

在其他一些地方

其中classX和classY是某个typename。

检查MYDEFINEclassX还是classY的最佳方法是什么? (这里可能超过2种类型,所以我正在寻求一些灵活的解决方案)

编辑:有关用例的更多内容,我有一个config.h文件供用户定义要使用的类型。我根据此配置值做了一些编译时决定,但不希望改变config.h的工作方式。

我愿意接受C ++ / C ++ 11中提供的解决方案

2 个答案:

答案 0 :(得分:3)

传统方法是使用单独的宏来定义

#ifdef USE_X
#define MYDEFINE classX
#else
#define MYDEFINE classY
#endif

并在需要知道时使用

#ifdef USE_X
// ...
#endif

答案 1 :(得分:0)

你的意图是什么?如果需要执行某些代码,可以使用函数重载:

void f(classX *)
{
    // Some actions for classX
}
void f(classY *)
{
    // Some actions for classY
}

f((MYDEFINE *) 0);

或者如果你需要定义一些东西:

template<class > class traits; // not defined

template<>
class traits<classX>
{
    typedef <type-for-classX> type;
};

template<>
class traits<classY>
{
    typedef <type-for-classY> type;
};

traits<MYDEFINE>::type var;