4.11.2 BOOST_STATIC_CONSTANT
C++(www.cppentry.com)98标准允许直接在类声明中为静态整型成员变量赋初始值,但并不是所有编译器都实现了这个特性。如果使用的编译器缺乏这个能力,那么只能使用enum来变通实现。
下面的代码定义了一个类static_int,它同时使用了这两种方法:
- struct static_int
- {
- static const int v1 = 10; //静态整型变量赋初值
- enum { v2 = 20}; //枚举得到编译期整数值
- int a[v2];
- };
- cout << static_int::v1 << endl;
- cout << static_int::v2 << endl;
这段代码在VC8下编译运行正常,但在较老的VC6下编译时v1的声明不被认可,v2的enum方式编译正常。
BOOST_STATIC_CONSTANT宏为这个解决问题提供了一个可移植的简便语法:
- BOOST_STATIC_CONSTANT(type, assignment)
使用BOOST_STATIC_CONSTANT宏,我们无须担心编译器的能力限制,代码会更具可移植性。它的用法就像是一个普通的变量赋值语句,只是使用了略微有些变形的宏形式,有点类似BOOST_AUTO。
之前的例子可以用BOOST_STATIC_CONSTANT宏改写如下:
- struct static_int
- {
- BOOST_STATIC_CONSTANT(int, v1 = 10);
- BOOST_STATIC_CONSTANT(int, v2 = 20);
- ...
- };
这样的代码比单纯的静态成员变量声明或者enum更清晰,具可读性。