预处理器:将宏参数转换为多字符文字

时间:2014-08-05 20:47:08

标签: c++ boost-mpl

简而言之:

可以将宏参数转换为字符串文字(包含相应的预处理标记序列的拼写) 关于16.3.2,n3797)与#运算符的论证。有没有办法,一些技巧,可能,将宏参数转换为多字节字符? 那么,例如,我将有一些宏TO_CHAR(WHATEWER)和TO_CHAR(CONSTANT)会给我'CONSTANT'多字节字符?

我需要这个才能与boost::mpl::string一起使用。更准确地说,我是这么认为的:

我有很多常量,我使用boost::mpl::vectorboost::mpl::vector_c)与他们合作。现在,我需要在使用此常量进行一些工作后打印出常量的名称。伪伪代码:

struct Temp
{
    template<typename Value>
    operator()(Value)
    {
        // ...
        std::cout << "The value of " << @Value::value Name << " is " << Value::value;
    };
};
typedef boost::mpl::vector_c<int, MY_CONST1, MY_CONST2> Constants;
boost::mpl::for_each<Constants>(Temp());

输出必须是这样的:

The value of MY_CONST1 is 1
The value of MY_CONST2 is 2

我不想通过大量输入制作一些运行时数组:

typedef boost::mpl::vector_c<int, MY_CONST1, MY_CONST2> Constants;
const char* constant_names[] = { "MY_CONST1", "MY_CONST2" };
// Work with this stuff

我想拥有的是这样的:

#define MAP_CONST(CONST) boost::mpl::pair<boost::mpl::int_<CONST>, (boost::mpl::string maybe here) #CONST>

typedef boost::mpl::vector<MAP_CONST(MY_CONST1), MAP_CONST(MY_CONST2)> Constants;
// Work with @Constants
不过,我一般不能使用constexp或新标准 - 我有C ++ 03编译器。

由于

UPD:抱歉我的不匹配 - 我的意思不是多字节字符,而是“多字符文字”(关于标准 - 2.14.3,n3797)。像this

那样的Somrthing

0 个答案:

没有答案