2013-07-04 11 views
5

Wie kann ich Inout-Parameter drucken?Wie man Inout-Parameter druckt?

import std.stdio; 

void main() 
{ 
    foo(2); 
    return; 
} 

inout(int) foo(inout(int) x) 
{ 
    writeln(x); 
    return x; 
} 

Compiler Ausgabe:

c:\D\dmd2\windows\bin\..\..\src\phobos\std\conv.d(3881): Error: template instance Unqual!(__T4ImplTNgiZ) does not match template declaration Unqual(T) 
c:\D\dmd2\windows\bin\..\..\src\phobos\std\stdio.d(757): Error: template instance std.conv.toTextRange!(inout(int), LockingTextWriter) error instantiating 
c:\D\dmd2\windows\bin\..\..\src\phobos\std\stdio.d(1708):  instantiated from here: write!(inout(int), char) 
x.d(11):  instantiated from here: writeln!(inout(int)) 
c:\D\dmd2\windows\bin\..\..\src\phobos\std\stdio.d(1708): Error: template instance std.stdio.File.write!(inout(int), char) error instantiating 
x.d(11):  instantiated from here: writeln!(inout(int)) 
x.d(11): Error: template instance std.stdio.writeln!(inout(int)) error instantiating 

Auch Zeichenfolge nicht mit dem inout Parameter arbeiten.

Update: Ich habe gerade aus (durch Versuch und Irrtum) festgestellt, dass die folgenden Werke:

writeln(cast(const)x); 

Ist dies die normale Methode oder bin ich etwas fehlt?

+0

Nicht hilfreich bei der Suche nach einer Lösung für Ihr Problem, aber was möchten Sie mit dem Attribut 'inout' vor dem Rückgabetyp erreichen? Wenn dies eine Methode wäre, würde dies bedeuten, dass "this" als inout deklariert würde. In diesem Fall würde ich lieber "int foo (inout (int) x) inout" verwenden, ähnlich wie "const" oder "pure". Da dies eine freie Funktion ist, nehme ich an, du meinst etwas wie 'inout (int) foo (inout (int) x)'. Aber da "int" ein primitiver Typ ist und trotzdem kopiert wird, könntest du es auch einfach weglassen. Bei zusammengesetzten/konstruierten Typen ist dies eine ganz andere Geschichte. –

+0

Sie haben absolut Recht, danke, falschen Code kopiert ... Was ich erreichen wollte: nur testen, wie inout Rückgabetyp gemäß Inout-Parameter ändert. – gerleim

Antwort