2010-08-18 8 views
28

Je sais que le code C++/CLIref et en C++/CLI

void foo(Bar^% x); 

se transforme en

Void foo(ref Bar x); 

Quel est le code C++/CLI qui devient

Void foo(out Bar x); 

?

Répondre

39

Vous pouvez utiliser le OutAttribute:

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

Il n'existe aucune syntaxe spécifique dans C++/CLI. Je pense que vous pouvez obtenir assez proche en ajoutant le OutAttribute pour modifier le paramètre. Mais je ne suis pas sûr que cela réalise exactement la même sémantique que C# out.

Le concept de out est pour la plupart limité à C#. Le CLR ne voit réellement que les paramètres ref. Les concepts out sont atteints via un mod opt je crois et la plupart des langues l'ignorent.

+1

Eh oui, même pour VB.NET –

+1

Il est la syntaxe passe par référence avec 'OutAttribute' appliquée au paramètre comme vous le dites. Il crée exactement les mêmes métadonnées qu'avec les paramètres C# 'out'. Par "pas ... exactement la même sémantique" faites-vous référence au fait qu'en C# le paramètre commence non initialisé et doit être définitivement assigné avant que la fonction ne retourne? –