C++宏,能否进行条件式的宏替换?

我的意思就是,如下定义一个带参的宏:
#define abc(p) <宏体>
希望根据p的不同值进行不同的替换,例如p==0时替换成int,p==1时替换成double这样的。

#include<stdio.h>

#define _abc(p,type) printf("当p=%d时,这里展开的是"#type"\n",p)
#define abc(p) \
if(p==0)\
_abc(p,int);\
else\
_abc(p,double);

int main()
{
abc(0);
abc(1);
}追问

您好,您这个回答已经十分充分了,但是还想继续请教一下:
#define _abc(pp) pp
#define abc(p) \
{if(p==0) _abc(int); \
else _abc(double);}
我希望abc(p)直接可以作为类型说明符来使用,请问还需要如何修改?

追答

你说用type来定义数据吗?
#include _abc(p,type) \
type temp;
可以直接定义啊
调用_abc(1,int);就展开成int temp;
另外不知道你了解#,##用法不,宏展开里#用来连接字符串,##用来连接代码,如
#define print(x) "hello " #x那么print(xf);就打印hello xf
#define print(n) x##n 那么print(1)就打印x1

追问

#和##的用法看您的解释已经懂了,但是我上一次追问所要表达的意思就是,希望一个宏定义,参数输入是0,1,2,然后该宏定义就对应替换成为int, char, double,这个替换后的结果我直接就要用来声明数据,例如abc(0) intVar=100;或者vector这样的,您看看有无可能。

追答

哦,这样啊,我也不知道怎么做了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-03
可以的追问

啊啊啊,太好了,请问具体怎么做?

追答

在宏里面用if语句嘛

相似回答