2013-07-04 30 views
5

Làm cách nào để in các tham số inout?Làm thế nào để in các thông số inout?

import std.stdio; 

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

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

đầu ra trình biên dịch:

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 

Ngoài ra, để chuỗi không làm việc với các tham số inout.

Cập nhật: Tôi vừa mới phát hiện ra (bằng cách thử và sai) rằng các công việc sau:

writeln(cast(const)x); 

Đây có phải là phương pháp thông thường hay tôi thiếu cái gì?

+0

Không hữu ích trong việc tìm kiếm giải pháp cho vấn đề của bạn, nhưng bạn muốn đạt được điều gì với thuộc tính 'inout' trước kiểu trả về? Nếu đây là một phương pháp, nó sẽ có nghĩa là 'this' sẽ được khai báo là inout. Trong trường hợp đó tôi muốn làm 'int foo (inout (int) x) inout', giống như bạn sẽ sử dụng' const' hoặc 'pure'. Vì đây là một hàm miễn phí, tôi giả sử bạn có nghĩa là đôi khi như 'inout (int) foo (inout (int) x)'. Nhưng vì 'int' là một kiểu nguyên thủy và sẽ được sao chép, bạn cũng có thể bỏ nó ra. Với các loại hợp chất/xây dựng, đây là một câu chuyện hoàn toàn khác. –

+0

Bạn hoàn toàn đúng, cảm ơn, đã sao chép mã sai ... Những gì tôi muốn đạt được: chỉ cần kiểm tra cách thay đổi kiểu trả về inout theo các tham số inout. – gerleim

Trả lời