简而言之:
可以将宏参数转换为字符串文字(包含相应的预处理标记序列的拼写) 关于16.3.2,n3797)与#运算符的论证。有没有办法,一些技巧,可能,将宏参数转换为多字节字符? 那么,例如,我将有一些宏TO_CHAR(WHATEWER)和TO_CHAR(CONSTANT)会给我'CONSTANT'多字节字符?
我需要这个才能与boost::mpl::string
一起使用。更准确地说,我是这么认为的:
我有很多常量,我使用boost::mpl::vector
(boost::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