作为我正在工作的节奏游戏的一部分,我允许用户创建和上传自定义歌曲和记事章.我正在考虑对歌曲和音符表进行哈希处理,以便对它们进行唯一识别.当然,我希望尽可能少的碰撞,但是,密码强度在这里并不是一个很大的均匀范围.另外,由于我很少执行哈希,因此计算效率不是太大的问题.
这是否像选择具有最大摘要大小的经过验证的哈希算法一样简单?或者我应该注意一些错综复杂的问题?我目前正在寻找SHA-256或512.
根据我在读取D时的理解,在immutable变量上使用关键字时,必须在编译时知道变量的值,而C#readonly不需要,并且readonly可以使用非静态值在类构造函数中分配字段.这可能在D?
有没有办法,给定一个函数变量,将函数的名称作为字符串?例如,如果我有:
void function(int) func;
Run Code Online (Sandbox Code Playgroud)
是否有一些函数x(),我可以得到:
x(func) == "func";
Run Code Online (Sandbox Code Playgroud)
?我觉得这可能是使用mixins,但我很困惑如何实现这一点.
我有一个全局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) 我有一个自定义的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对象就行了.
D文档似乎有点乱,我无法在官方网站上的任何地方找到这些信息.我需要一些常见的异常类型(例如NotFiniteNumberException,FileIOException,类似的类型),这些存在于核心库中,还是我必须自己滚动?
我在围绕如何与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文件的例子,我将非常感激.
我有一个可变的D风格函数foo(format, ...),它是一个包装器writefln.我想做这样的事情:
foo(format, <...>) {
//...
writefln(format, ...);
}
Run Code Online (Sandbox Code Playgroud)
基本上,将省略号参数传递给writefln.我知道这在C/C++中并不容易/可能,但有没有办法在D中实现这一点?
我完全不知道如何将FreeType 2.4.8编译为静态库,并且可以从我在Windows中的D应用程序中使用.我尝试用objconv,coff2omf和尝试extern(C)/ extern(System)等运行它,但似乎没有任何效果.我发现符号未找到错误,访问违规以及一堆无用的错误.
我该如何解决这个问题?我是否正确使用pragma lib链接到我的静态库,如何可靠地将COFF静态库转换为DMF/Optlink可以使用的OMF?
编辑:我尝试过的一些例子:
我能够通过动态库和符号加载来实现它,但我更喜欢在部署项目时不需要一堆外部依赖项.