我知道
debug writeln("Some good debug message")
在pure函数中,但是我仔细标记为@safe的函数@trusted呢?DMD 目前不允许debug writeln's 在那些,因为writeln目前和类似的是@system。恕我直言,这非常令人沮丧。有没有一种巧妙的方法来逃避安全,还是我必须暂时注释掉我所有的@safe和@trusted标签?
我知道
debug writeln("Some good debug message")
在pure函数中,但是我仔细标记为@safe的函数@trusted呢?DMD 目前不允许debug writeln's 在那些,因为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);
}