4.11.1 BOOST_STRINGIZE
宏BOOST_STRINGIZE可以将任意字面量转换为字符串。为了使用BOOST_STRINGIZE宏,需要包含头文件<boost/config/suffix.hpp>,即:
- #include <boost/config/suffix.hpp>
BOOST_STRINGIZE是一个宏,这一点很重要,意味着它仅能用于编译期(准确地说是编译前预处理时),不支持运行时转换。如果要在运行时转换数字或者其他变量到字符串,请使用5.1节的lexical_cast(第163页)。
示范BOOST_STRINGIZE用法的代码如下所示,其中的__LINE__是C标准中定义的内置宏,表示程序的行号,是一个long型整数:
- cout << BOOST_STRINGIZE(__LINE__) << endl;
- cout << std::boolalpha << (string("22") == BOOST_STRINGIZE(__LINE__)) << endl;
- int x = 255;
- cout << BOOST_STRINGIZE(x) << endl;
程序的运行结果如下:- 21
- true
- x
代码的前两条语句运用了BOOST_STRINGIZE,把编译期的整数转换成了字符串,而第三个BOOST_STRINGIZE因无法处理运行时的整数变量,只能把它转换成字面意义的字符串。
BOOST_STRINGIZE最常见的用途是在泛型编程(www.cppentry.com)中将编译期常数转换成字符串,在调试或者输出日志时相当方便,如boost.exception中就用到了BOOST_STRINGIZE。