Инициализация ассоциативного массива значений struct и строковых ключей

(для языка программирования "D")

Я пытаюсь инициализировать ассоциативный массив, который имеет элементы struct и должен индексироваться строкой. Я бы импортировал его как модуль из отдельного файла.

Вот чего я хочу добиться (и это не работает - я не знаю, возможно ли это вообще):

mnemonic_info[string] mnemonic_table = [
        /* name,         format,          opcode */
        "ADD": {mnemonic_format.Format3M, 0x18},
        ...

        /* NOTE: mnemonic_format is an enum type. */
        /* mnemonic_info is a struct with a mnemonic_format and an ubyte */
];

Обратите внимание, что это прекрасно работает для массивов, индексируемых целыми числами.

Оптимально, я бы хотел, чтобы это оценивалось во время компиляции, так как я не буду его изменять. Однако, если это невозможно, я буду рад, если вы подскажете мне лучший способ создания такого массива во время/до непосредственного выполнения.

Мне это нужно, потому что я пишу ассемблер.

Я искал ответ на SO и в интернете, но смог найти только примеры с целыми числами и другие вещи, которые я не понял или не смог заставить работать.

Пока что мне очень нравится D, но, похоже, его трудно изучать из-за того, что в Интернете не так много учебников.

Спасибо!

На заметку: возможно ли использовать Tuples для элементов ассоциативного массива вместо пользовательского struct?

Редактировать

Пока я нашел один способ, но он довольно уродлив:

mnemonic_info[string] mnemonic_table;
static this() { // Not idea what this does.
        mnemonic_info entry;

        entry.format = mnemonic_format.Format3M;
        entry.opcode = 0x18;
        mnemonic_table["ADD"] = entry;

        /* ... for all entries. */
}
5
задан Matej 10 December 2011 в 16:56
поделиться