我正在尝试构建一个以Java作为源语言而C ++作为目标语言的翻译器。 我遇到了一些困难,因为在C ++中没有像Java那样使用静态块
在Java语法中,静态块定义如下:
StaticInitializer:
static Block
现在问题是:如何以简单的方式将这个Java构造转换为C ++?
答案 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;
}