d - 使用调试语句转义安全



我知道

debug writeln("Some good debug message")

pure函数中,但是我仔细标记为@safe@trusted的函数呢?DMD 目前不允许在这些debug writeln,因为writeln和类似内容目前@system。恕我直言,这非常令人沮丧。有没有一种聪明的方法来逃避安全,或者我是否必须暂时注释掉我所有的@safe@trusted标签?

我所做的就是制作自己的@trusted debug_writeln。

@trusted void debug_writeln(T...)(T t) {
      import std.stdio;
      writeln(t);
}

由于这是@trusted,它将在@safe函数中工作而不会更改任何内容。您也可以将其称为 writeln,然后不要导入 std.stdio 或别名来强制消除歧义。

通用解决方案

import std.stdio;
void main () @safe pure
{
    auto str = trustedPureDebugCall!readln();
    trustedPureDebugCall!writeln(str);
}
debug auto trustedPureDebugCall (alias fn, A...) (A args) @trusted pure
{
     debug return fn(args);
}

相关内容

  • 没有找到相关文章

最新更新