Вы можете сделать что-то похожее с шаблоном. Проверьте это:
import std.stdio;
// do not declare two of these on the same line or they'll get mixed up
struct persistent(Type, string file = __FILE__, size_t line = __LINE__) {
Type info;
alias info this;
// require an initializer
@disable this();
// with the initializer
this(Type t) {
// if it is in the file, we should load it here
// else...
info = t;
}
~this() {
// you should actually save it to the file
writeln("Saving ", info, " as key ",
file,":",line);
}
}
void main() {
persistent!int x = 10;
}
Если вы запустите ее, вы увидите initalizer и записи, и если вы заполнили файл резервного (возможно с помощью JSON ключей и значений, или какой-нибудь другой сериалайзер обрабатывать более типы), он должен быть в состоянии сохранить. Вы также можете сохранить dtor в глобальный буфер, а затем удалить деструктор модуля в файл (и конструктор модуля также загрузит файл), поэтому он не пытается читать/записывать файлы при каждом вызове функции.
Все переменные будут действовать так, как если бы они были статическими, так как вы можете видеть ключ здесь, это номер файла и строки декларации без экологического ввода. Но эй, это довольно просто и должно работать.
вы хотите опубликовать это на [форуме цифровых марсов] (http://forum.dlang.org/group/digitalmars.D), а затем посмотреть, что они говорят, я не думаю, что они это сделают это по ряду причин. –