出于内省的目的,有时我想自动为类型或类似的东西分配序列号.
不幸的是,模板元编程本质上是一种功能语言,因此缺乏实现这种计数器的全局变量或可修改状态.
或者是吗?
按请求的示例代码:
#include <iostream>
int const a = counter_read;
counter_inc;
counter_inc;
counter_inc;
counter_inc;
counter_inc;
int const b = counter_read;
int main() {
std::cout << a << ' ' << b << '\n'; // print "0 5"
counter_inc_t();
counter_inc_t();
counter_inc_t();
std::cout << counter_read << '\n'; // print "8"
struct {
counter_inc_t d1;
char x[ counter_read ];
counter_inc_t d2;
char y[ counter_read ];
} ls;
std::cout << sizeof ls.x << ' ' << sizeof ls.y << '\n'; // print "9 …Run Code Online (Sandbox Code Playgroud) 我正在编写一堆相关的预处理器宏,其中一个生成另一个跳转到的标签.我以这种方式使用它们:
MAKE_FUNNY_JUMPING_LOOP(
MAKE_LABEL();
MAKE_LABEL();
)
Run Code Online (Sandbox Code Playgroud)
我需要一些方法来生成唯一标签,每个内部MAKE_LABEL调用一个,使用预处理器.我尝试过使用__LINE__,但由于我MAKE_LABEL在另一个宏内部调用,它们都有相同的行并且标签发生碰撞.
我想要扩展到的是:
MAKE_FUNNY_JUMPING_LOOP(
my_cool_label_1: // from first inner macro
...
my_cool_label_2: // from second inner macro
...
)
Run Code Online (Sandbox Code Playgroud)
有没有办法用预处理器生成哈希值或自动递增整数?