相关疑难解决方法(0)

C++是否支持编译时计数器?

出于内省的目的,有时我想自动为类型或类似的东西分配序列号.

不幸的是,模板元编程本质上是一种功能语言,因此缺乏实现这种计数器的全局变量或可修改状态.

或者是吗?


按请求的示例代码:

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

c++ templates state metaprogramming

60
推荐指数
7
解决办法
2万
查看次数

如何在C预处理器中生成唯一值?

我正在编写一堆相关的预处理器宏,其中一个生成另一个跳转到的标签.我以这种方式使用它们:

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)

有没有办法用预处理器生成哈希值或自动递增整数?

macros c-preprocessor

17
推荐指数
4
解决办法
2万
查看次数

带内存的c ++宏?

是否可以定义宏

write_foo(A);
and
read_foo();
Run Code Online (Sandbox Code Playgroud)

以便:

WRITE_FOO(hello);

code_block_1;

READ_FOO();

code_block_2;

READ_FOO();

WRITE_FOO(world);

code_block_3;

READ_FOO();

code_block_4;

READ_FOO();
Run Code Online (Sandbox Code Playgroud)

扩展为:

code_block_1;
hello;
code_block_2;
hello;

code_boock_3;
world;
code_block_4;
world;
Run Code Online (Sandbox Code Playgroud)

谢谢!

c++ macros

7
推荐指数
1
解决办法
2766
查看次数

什么是代码生成技术?

我正在生成C++代码,看起来它会变得非常混乱,即使我的简单生成类已经有很多特殊情况.以下是现在的代码:http://github.com/alex/alex-s-language/tree/local%2Fcpp-generation/alexs_lang/cpp.

c++ python code-generation

4
推荐指数
3
解决办法
2549
查看次数