2013-10-16 7 views
2

나는 pure 기능에이스케이프 안전

debug writeln("Some good debug message") 

알고하지만 난 조심스럽게 @safe 또는 @trusted로 태그 한 기능에 대한 무엇? 현재 writeln 및 이와 비슷한 것이 @system이므로 DMD는 현재 debug writeln을 허용하지 않습니다. 이것은 매우 초조 한 IMHO입니다. 안전을 피할 수있는 영리한 방법이 있습니까? 아니면 내 @safe@trusted 태그를 모두 일시적으로 주석 처리해야합니까?

답변

5

내가하는 일은 내 트러스트 된 @ debug_writeln을 만드는 것입니다.

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

@ 신뢰할 수 있기 때문에 @safe 함수 내에서 아무 것도 변경하지 않고 작동합니다. writeln을 호출 한 다음 std.stdio 나 alias를 임포트하지 않아도 모호성을 제거 할 수 있습니다.

+0

좋아! 나는 너희들에게 해결책이 있다는 것을 알았다.) –

+0

나는 이것이 우리 모두가하는 일이라고 생각한다. :) – DejanLekic

+0

T가 안전하지 않은 경우! string 메소드를 사용하면 이것이 나쁘다. – Demi

2

일반적인 솔루션

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); 
}