C ++中的静态块

时间:2017-11-20 19:41:04

标签: java c++ static compiler-construction

我正在尝试构建一个以Java作为源语言而C ++作为目标语言的翻译器。 我遇到了一些困难,因为在C ++中没有像Java那样使用静态块

在Java语法中,静态块定义如下:

StaticInitializer:

    static Block

现在问题是:如何以简单的方式将这个Java构造转换为C ++?

2 个答案:

答案 0 :(得分:2)

正如评论中已经提到的那样,Java规范要求静态构造函数应该在第一次使用类之前运行。快速而肮脏的解决方案(例如添加构造函数包含给定代码的静态成员)不满足该要求。因此,您需要控制自己进行初始化的顺序,而不是依靠C ++功能来为您处理。

最简单的方法是添加一个静态成员变量来跟踪该类是否已初始化,以及一个静态方法来初始化它。如果(并且仅当)类尚未初始化,静态方法将运行静态初始化程序块中的代码。之后它会将成员设置为true。现在,您可以在使用类之前插入对静态方法的调用,它将按指定的方式运行。

答案 1 :(得分:0)

我不太确定从Java到C ++执行如此直接的转换是个好主意,但是如果你真的需要在C ++中使用Java-esque静态块,你当然可以使用所描述的机制获得一个我的this answer

使用方法如下:

static_block {
    std::cout << "I'm in the static block!" << std::endl;
}