小编Mar*_*ine的帖子

理想的散列方法可以实现广泛的价值分配?

作为我正在工作的节奏游戏的一部分,我允许用户创建和上传自定义歌曲和记事章.我正在考虑对歌曲和音符表进行哈希处理,以便对它们进行唯一识别.当然,我希望尽可能少的碰撞,但是,密码强度在这里并不是一个很大的均匀范围.另外,由于我很少执行哈希,因此计算效率不是太大的问题.

这是否像选择具有最大摘要大小的经过验证的哈希算法一样简单?或者我应该注意一些错综复杂的问题?我目前正在寻找SHA-256或512.

algorithm hash cryptography

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

D中C#`readonly`关键字的等价物?

根据我在读取D时的理解,在immutable变量上使用关键字时,必须在编译时知道变量的值,而C#readonly不需要,并且readonly可以使用非静态值在类构造函数中分配字段.这可能在D?

c# d immutability

7
推荐指数
2
解决办法
475
查看次数

有没有办法将函数变量转换为D中的字符串?

有没有办法,给定一个函数变量,将函数的名称作为字符串?例如,如果我有:

void function(int) func;
Run Code Online (Sandbox Code Playgroud)

是否有一些函数x(),我可以得到:

x(func) == "func";
Run Code Online (Sandbox Code Playgroud)

?我觉得这可能是使用mixins,但我很困惑如何实现这一点.

d function mixins

6
推荐指数
1
解决办法
96
查看次数

从D中的析构函数调用模块级函数(似乎抛出OutOfMemoryError)

我有一个全局D模块,它包含一些辅助函数(即用于日志记录),它们在模块级而不是在类中.但是,当从析构函数调用这些函数时,我得到一个core.exception.OutOfMemoryError和/或应用程序挂起并崩溃.我在这里做错了吗?

精简测试用例:

logger.d

module main.logger;
void log(const(char)[] msg) {
    auto time = // GET TIME OF DAY SOMEHOW
    std.stdio.writeln(std.conv.to!string(time) ~ " " ~ msg);
}
Run Code Online (Sandbox Code Playgroud)

class.d

module main.class;
import main.logger;

class A {
    public:
        this() {}
        ~this() { log("Destructor"); }
}
Run Code Online (Sandbox Code Playgroud)

d

6
推荐指数
1
解决办法
129
查看次数

通过DataContract序列化为XML:自定义输出?

我有一个自定义的Fraction类,我在整个项目中使用它.它很简单,它由一个构造函数组成,接受两个int并存储它们.我想使用DataContractSerializer来序列化我的项目中使用的对象,其中一些包括Fractions作为字段.理想情况下,我希望能够像这样序列化这样的对象:

<Object>
    ...
    <Frac>1/2</Frac> // "1/2" would get converted back into a Fraction on deserialization.
    ...
</Object>
Run Code Online (Sandbox Code Playgroud)

与此相反:

<Object>
    ...
    <Frac>
        <Numerator>1</Numerator>
        <Denominator>2</Denominator>
    </Frac>
    ...
</Object>
Run Code Online (Sandbox Code Playgroud)

有没有办法使用DataContracts做到这一点?

我想这样做是因为我打算让XML文件是用户可编辑的(我将它们用作音乐游戏的输入,并且它们本质上就作为记事本),并且希望尽可能简洁地保留符号.对于最终用户来说,他们不需要处理尽可能多的文本墙.

编辑:我还应该注意,我目前将我的Fraction类视为不可变(所有字段都是readonly),因此无法更改现有Fraction的状态.但是,返回一个新的Fraction对象就行了.

c# serialization xml-serialization datacontractserializer

5
推荐指数
2
解决办法
5873
查看次数

Phobos(和/或Tango)有一组预定义的异常类型吗?

D文档似乎有点乱,我无法在官方网站上的任何地方找到这些信息.我需要一些常见的异常类型(例如NotFiniteNumberException,FileIOException,类似的类型),这些存在于核心库中,还是我必须自己滚动?

d exception tango phobos

5
推荐指数
1
解决办法
245
查看次数

在D中调用动态和静态库中的C/C++函数

我在围绕如何与C/C++库接口时遇到了麻烦,包括静态(.lib/.a)和动态(.dll/.so),在D中.根据我的理解,可以告诉它DMD编译器与.lib文件链接,并且您可以使用Digital Mars提供的implib工具将.dll文件转换为.lib.另外,我遇​​到过这个页面,这意味着能够通过将C头文件转换为D接口文件来调用.dll中的函数.这两种方法都是等价的吗?这些相同的方法是否适用于Unix库文件?另外,如何从这些库中引用函数,枚举等,以及如何告诉他们的D编译器与这些库链接(我特别使用VisualD)?如果有人能提供一些从D代码引用.lib,.dll,.a和.so文件的例子,我将非常感激.

c c++ d

5
推荐指数
1
解决办法
2558
查看次数

Dpp中的gppg/gplex等价物?

当我在C#中的工作,我发现GPPGgplex语法/词法分析器发电机是适合我的需求.我想知道D编程语言是否有类似的东西(即,在BNF或EBNF中给出语法的实用程序,输出将该语言修改/解析为抽象语法树的D代码).

我发现的最接近的是Goldie,但是我很难理解它,我无法得到任何东西.

parsing d gppg abstract-syntax-tree lexical-analysis

5
推荐指数
1
解决办法
333
查看次数

将一个函数中的可变参数传递给D中的另一个函数

我有一个可变的D风格函数foo(format, ...),它是一个包装器writefln.我想做这样的事情:

foo(format, <...>) {
    //...
    writefln(format, ...);
}
Run Code Online (Sandbox Code Playgroud)

基本上,将省略号参数传递给writefln.我知道这在C/C++中并不容易/可能,但有没有办法在D中实现这一点?

d variadic-functions

5
推荐指数
1
解决办法
578
查看次数

如何在D中使用C静态库?

我完全不知道如何将FreeType 2.4.8编译为静态库,并且可以从我在Windows中的D应用程序中使用.我尝试用objconv,coff2omf和尝试extern(C)/ extern(System)等运行它,但似乎没有任何效果.我发现符号未找到错误,访问违规以及一堆无用的错误.

我该如何解决这个问题?我是否正确使用pragma lib链接到我的静态库,如何可靠地将COFF静态库转换为DMF/Optlink可以使用的OMF?

编辑:我尝试过的一些例子:

  1. 使用VS 2010将FreeType源编译为静态库,在我的D代码中使用pragma lib进行链接.(返回"库格式未知"类型错误)
  2. 与上面相同,但使用objconv转换为OMF格式,然后尝试与pragma lib链接.(已成功链接,但仍无法调用函数.)
  3. 编译了FreeType源代码的DLL,通过implib运行它来创建一个导入库,尝试用​​pragma lib链接.(链接成功,但由于"尝试特权功能"或"访问冲突"错误而无法调用任何功能)
  4. 我已经尝试将函数原型定义为:extern(System),extern(C)和extern(Windows).第一个和第三个修改外部函数的函数名称,使它们与静态库不匹配,第二个编译,但是在实际尝试调用函数时,我在运行时遇到访问冲突.

我能够通过动态库和符号加载来实现它,但我更喜欢在部署项目时不需要一堆外部依赖项.

linker d static-libraries

5
推荐指数
1
解决办法
1039
查看次数