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,将来可能会有更多的选择。