initialization - 初始化结构值和字符串键的关联数组

标签 initialization d associative-array

(对于“D”编程语言)

我一直在努力尝试初始化一个具有结构元素并且应该可以通过字符串索引的关联数组。我会将它作为模块从单独的文件中导入。

这就是我想要实现的(它不起作用——我不知道这是否可能):

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,但由于在线教程不多,因此似乎很难学习。

谢谢!

附带说明:是否可以将元组用于关联数组元素而不是自定义结构?

编辑

到目前为止我发现了一种方法,但它非常难看:
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. */
}

最佳答案

在 D 中,内置关联数组字面量总是在运行时创建,因此通过在声明位置为其分配一些值来初始化全局关联数组目前是不可能的。

正如您发现的那样,您可以通过为 module constructor 中的关联数组分配一个值来解决此问题。 .

代码中的另一个问题是结构初始化文字。你应该更喜欢 D-style将结构初始化器转换为 C 风格的初始化器。

例子:

struct Foo {
    int a;
    string b;
}

Foo[string] global;

static this() {
    global = [
        "foo" : Foo(1, "hurr"),
        "bar" : Foo(2, "durr")
    ];
}

void main() {
    assert(global["foo"].a == 1);
}

关于initialization - 初始化结构值和字符串键的关联数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8457156/

相关文章:

C:动态分配时通过引用传递

d - 启用或禁用 const 数组中的元素

php - 如何仅提取数组键(字符串)的一部分并更改其大小写

javascript - 在javascript中对对象的关联数组进行排序

c++ - 数组 C++ 中的大括号初始化

c++ - GCC 中的 __attribute__((init_priority(X)))

constants - D 中的 const/ref 问题

ruby - 如何检查哈希中是否存在特定键?

c++跨编译单元的增量类型ID

arrays - 如何在 Dlang 中对对象数组进行排序?