Macro-based counter
是否可以像这样创建编译时常量:
1
2 3 4 5 6 7 |
// event.h #define REGISTER_EVENT_TYPE() … // Returns last_returned_number+1 // header1 |
其中
尝试了以下代码:
1
2 3 4 |
#define DEF_X(x) const int x = BOOST_PP_COUNTER; #define REGISTER_EVENT_TYPE(x) BOOST_PP_UPDATE_COUNTER()DEF_X(x) #include REGISTER_EVENT_TYPE(SOME_EVENT_TYPE) |
但是包含吃常量声明。
是的,这是可能的,但是使用
见 BOOST_PP_COUNTER
使用示例:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <boost/preprocessor/slot/counter.hpp>
constexpr int A = BOOST_PP_COUNTER; // 0 #include BOOST_PP_UPDATE_COUNTER() constexpr int B = BOOST_PP_COUNTER; // 1 #include BOOST_PP_UPDATE_COUNTER() constexpr int C = BOOST_PP_COUNTER; // 2 #include BOOST_PP_UPDATE_COUNTER() constexpr int D = BOOST_PP_COUNTER; // 3 |
参见工作示例。
最后注意:不要使用宏来存储结果,你会在所有这些定义的常量中得到相同的数字:
1
2 3 4 5 6 7 8 9 |
#include <boost/preprocessor/slot/counter.hpp>
#define A BOOST_PP_COUNTER // A is 0 #include BOOST_PP_UPDATE_COUNTER() #define B BOOST_PP_COUNTER // B is 1, but A is 1 too int main() { cout << A << B << endl; } |
输出:
1
|
11
|
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/268897.html