C++ C++;测试宏定义的类型信息值

C++ C++;测试宏定义的类型信息值,c++,c,macros,c-preprocessor,C++,C,Macros,C Preprocessor,我有这样一个宏: #define MYDEFINE classX 可能是 #define MYDEFINE classY 在其他一些地方 其中classX和classY是某种类型的名称 检查MYDEFINE是classX还是classY的最佳方法是什么?(这里可能有两种以上的类型,因此我正在寻找一些灵活的解决方案) 编辑:关于用例的更多信息,我有一个config.h文件供用户定义要使用的类型。根据这个配置值,我需要在编译时做出一些决定,但不希望更改config.h的工作方式 我对C++/C+

我有这样一个宏:

#define MYDEFINE classX
可能是

#define MYDEFINE classY
在其他一些地方

其中classX和classY是某种类型的名称

检查
MYDEFINE
classX
还是
classY
的最佳方法是什么?(这里可能有两种以上的类型,因此我正在寻找一些灵活的解决方案)

编辑:关于用例的更多信息,我有一个
config.h
文件供用户定义要使用的类型。根据这个配置值,我需要在编译时做出一些决定,但不希望更改
config.h
的工作方式


我对C++/C++11中可用的解决方案持开放态度。传统的方法是使用单独的宏在定义之间进行选择

#ifdef USE_X
#define MYDEFINE classX
#else
#define MYDEFINE classY
#endif
当你需要知道的时候就用它

#ifdef USE_X
// ...
#endif

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

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;
模板类特征;//未定义
模板
阶级特征
{
类型定义类型;
};
模板
阶级特征
{
类型定义类型;
};
性状:类型变量;

为什么需要这些宏?也许我们需要更好地解释他们的用例。难道你不能打印出一个快速的检查的成员变量吗?它是什么C或C++?答案可能会有所不同,只要你能更好地描述你真正想要的东西。更新更多信息我更喜欢不需要额外变量/定义的东西。一个原因是,我可能不仅仅有classX/classY,将来可能会有更多的选择。