C++ 基于宏的计数器

C++ 基于宏的计数器,c++,c++11,boost,boost-preprocessor,C++,C++11,Boost,Boost Preprocessor,是否可以创建如下编译时常量: // event.h #define REGISTER_EVENT_TYPE() ... // Returns last_returned_number+1 // header1 #define SOME_EVENT REGISTER_EVENT_TYPE() // header2 #define SOME_OTHER_EVENT REGISTER_EVENT_TYPE() 其中某些事件将为0,而某些其他事件将为1 尝试了以下代码: #define DEF_X(

是否可以创建如下编译时常量:

// event.h
#define REGISTER_EVENT_TYPE() ... // Returns last_returned_number+1

// header1
#define SOME_EVENT REGISTER_EVENT_TYPE()
// header2
#define SOME_OTHER_EVENT REGISTER_EVENT_TYPE()
其中
某些事件
将为0,而
某些其他事件
将为1

尝试了以下代码:

#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)  

但是包含eats常量声明。

是的,这是可能的,但是使用
const/constepr int
和Boost.Preprocessor

用法示例:

#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

是否希望宏在每次“调用”时返回不同的常量?我很确定这是不可能的。宏是编译时的,而您要求的是执行时的数据。。。这是不可能的。谢谢,但我知道BOOST_PP_计数器,我正试图找到一种方法将以下代码包装到单个宏中<代码>constexpr int A=升压计数器#包括BOOST\u PP\u UPDATE\u COUNTER()@DejaVu-请记住始终添加或至少提及您迄今为止尝试过的内容。不管怎样,我留下这个答案。我希望它能为其他人服务。@DejaVu-在评论中回答你的问题:嗯-你不能在宏定义中有
。恐怕新ID需要两行代码,或者,为什么不直接使用
enum
。。。
#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; }
 11