2010-08-18 11 views
28

so che il codice C++/CLIref e in C++/CLI

void foo(Bar^% x); 

trasforma in

Void foo(ref Bar x); 

Qual è il codice C++/CLI che diventa

Void foo(out Bar x); 

?

risposta

39

È possibile utilizzare l'OutAttribute:

using namespace System::Runtime::InteropServices;  
void foo([Out] Bar^% x); 
8

Non esiste una sintassi specifica in C++/CLI. Penso che puoi essere abbastanza vicino aggiungendo il OutAttribute per modificare il parametro. Ma non sono sicuro che raggiunga esattamente la stessa semantica di C# out.

Il concetto di out è per la maggior parte limitato a C#. Il CLR vede solo i parametri ref. I concetti out si ottengono tramite un mod opt e la maggior parte delle lingue lo ignorano.

+1

Yup, lo stesso per VB.NET –

+1

È la sintassi pass-by-di riferimento con 'OutAttribute' applicato al parametro come dici tu. Crea esattamente gli stessi metadati dei parametri di C# 'out'. Con "non ... la stessa identica semantica" ti riferisci al fatto che in C# il parametro inizia non inizializzato e deve essere assegnato definitivamente prima che la funzione ritorni? –