我有一个像这样的宏:
#define MYDEFINE classX
它可能是
#define MYDEFINE classY
在其他一些地方
其中classX和classY是某个typename。
检查MYDEFINE
是classX
还是classY
的最佳方法是什么? (这里可能超过2种类型,所以我正在寻求一些灵活的解决方案)
编辑:有关用例的更多内容,我有一个config.h
文件供用户定义要使用的类型。我根据此配置值做了一些编译时决定,但不希望改变config.h
的工作方式。
我愿意接受C ++ / C ++ 11中提供的解决方案
答案 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;