小编ccj*_*uju的帖子

D语言:初始化动态多维数组最佳实践?

只是好奇这是否是在D中初始化动态多维数组的最佳实践.在他们的语言参考中有一个关于数组的部分,但我不太确定它是否超出了我想要完成的任务.

class Map {
    Tile[][] tiles;

    this(uint width, uint height) {
        tiles.length = height;
        foreach (ref tilerow; tiles)
            tilerow.length = width;
    }
}

Map map1 = new Map(5000, 3000); // values determined at runtime
Run Code Online (Sandbox Code Playgroud)

(或类似的替代方案,如典型的(y = 0; y <height; y ++)循环).

我对此的担心是它分别重新分配数组的每一行而不是整个数据块,所以我不知道这是否会导致太多的内存改组.此外,我相信它不能保证是连续的(因为在这种情况下,tile只是一个指针数组).有没有"更好"的方法来做到这一点(不涉及使用一维数组并自己计算索引)?据我所知,从文档中可以看到一个连续的多维数组只能在编译时用不可变维度声明,只是想知道我是否遗漏了一些东西......

d multidimensional-array

8
推荐指数
1
解决办法
1990
查看次数

MySQL的MySQL语言绑定?

是否有任何现有的,工作的MySQL语言绑定D(特别是Windows下的D 2.0)仍在维护,更新,甚至远程戳?几十个谷歌搜索大多只指向一个Manfred Hansen 先前在http://www.steinmole.de/d/上托管的代码,但是这个网站现在已经死了,似乎没有任何镜像副本存在.

我确实设法找到了这个:http://code.google.com/p/mysql4d/以及另一个名为DDBI的项目,它显然只适用于D 1.0和Tango.我无法链接这些,但是..更多谷歌搜索表明我需要使用implib.exe将MySQL包含的libmysql.dll转换为libmysql.lib,但程序似乎对我失败:

>implib.exe /system libmysql.lib libmysql.dll     
Digital Mars Import Library Manager Version 7.6B1n
Copyright (C) Digital Mars 2000.  All Rights Reserved.
Error(10): Error: cannot read DLL input file
Run Code Online (Sandbox Code Playgroud)

谷歌搜索"无法读取DLL输入文件"显示完全恐怖:零结果.我做的事情是完全错误的,还是我有一些版本的MySQL无法再转换DLL?

版本:

DMD32 D Compiler v2.056
MySQL Ver 14.14 Distrib 5.5.8, for Win64 (x86)
Run Code Online (Sandbox Code Playgroud)

mysql windows d

7
推荐指数
1
解决办法
1120
查看次数

D:继承静态变量,按类区分?

我正在处理一种情况,我希望有一个定义静态关联数组的特定基类和使用它的静态函数,然后在从它继承的类中复制此功能,但每个子类都有它自己的数组实例.看起来子类只是继承了父类的数组,而不是像我希望的那样创建自己的静态副本.以下是我希望完成的超简化精简版本:

class MyBase {
    static string[string] dict;
    static void attach(string key, string val) {
        dict[key] = val;
    }
}
class MySubA : MyBase {
    // various unique member variables
}
class MySubB : MyBase {
    // ...
}
void main() {
    MySubA.attach("a", "a1");
    MySubB.attach("b", "b1");
    writefln("-:%s", MyBase.dict);
    writefln("A:%s", MySubA.dict);
    writefln("B:%s", MySubB.dict);
}
Run Code Online (Sandbox Code Playgroud)

期望的输出:

-:[]
A:["a":"a1"]
B:["b":"b1"]
Run Code Online (Sandbox Code Playgroud)

实际产量:

-:["a":"a1", "b":"b1"]
A:["a":"a1", "b":"b1"]
B:["a":"a1", "b":"b1"]
Run Code Online (Sandbox Code Playgroud)

有没有办法解决这个问题而不放弃继承并只复制每个子类的相关代码?分配给我正在使用的数组的实际代码比上面列出的附加函数更复杂,所以我想避免每次都复制它,或者在必要时手动分配给.dict.我想知道是否有一个涉及可能有用的模板的解决方案,但我似乎无法将它拼凑在一起.

inheritance static-methods d static-members

3
推荐指数
1
解决办法
272
查看次数