宏与字符串解决方案

宏与字符串
#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