读书人

宏与字符串解决方案

发布时间: 2013-02-15 15:46:56 作者: rapoo

宏与字符串
#define CON1 MACRO1(3,"abcdef")

template<int n>
class A{
};
int main(int argc,char* argv[])
{
A<GET_NUM(CON1)> xx;
const char* p = GET_TEXT(CON1);
}

求三个宏的实现,MACRO1,GET_NUM,GET_TEXT,一定要编译通过哦
[解决办法]


#include <cstdio>

#define HELPER(n,s,name) \
namespace _##name { \
extern char const STR[] = #s; \
extern const int I = n; \
}
#define GET_NUM(a) (_##a::I)
#define GET_TEXT(a) (_##a::STR)


template <int v>
struct A{};

HELPER(3,abcdef,CON1)

int main()
{
A<GET_NUM(CON1)> xx;
int v = GET_NUM(CON1);
const char* p = GET_TEXT(CON1);
printf("%d,%s", v, p);//3, abcdef
return 0;
}

引用:
不可以再单独定义变量,因为那个单独定义的变量不可以通过宏自动产生,只可以定义宏。
这个题的难点就是 模板类加enum只能对数字常量有效,不支持直接传字符串,需要额外定义变量,达不到要求。
#define CON1 MACRO1(3,"abcdef") 中的 3 和 abcdef是会变化的值,也就是你不可以假设他是3和abcdef, 你定义的变量的变量是假设了值必须是 abcdef


读书人网 >C++

热点推荐