32 votes

En C ++ / CLI, comment déclarer et appeler une fonction avec un paramètre 'out'?

J'ai une fonction qui analyse une chaîne de caractères en deux chaînes. En C#, je voudrais déclarer comme ceci:

void ParseQuery(string toParse, out string search, out string sort)
{
    ...
}

et je voudrais l'appeler comme ceci:

string searchOutput, sortOutput;
ParseQuery(userInput, out searchOutput, out sortOutput);

Le projet actuel a à faire en C++/CLI. J'ai essayé

using System::Runtime::InteropServices;

...

void ParseQuery(String ^ toParse, [Out] String^ search, [Out] String^ sort)
{
    ...
}

mais si je l'appelle comme ceci:

String ^ searchOutput, ^ sortOutput;
ParseQuery(userInput, [Out] searchOutput, [Out] sortOutput);

J'obtiens une erreur du compilateur, et si je l'appelle comme ceci:

String ^ searchOutput, ^ sortOutput;
ParseQuery(userInput, searchOutput, sortOutput);

ensuite, j'obtiens une erreur à l'exécution. Comment dois-je déclarer et appeler ma fonction?

53voto

Bert Huijben Points 13856

C ++ / CLI elle-même ne prend pas en charge un véritable argument 'out', mais vous pouvez marquer une référence en tant qu'argument out pour que les autres langues le voient comme un argument out réel.

Vous pouvez le faire pour les types de référence tels que:

 void ReturnString([Out] String^% value)
{
   value = "Returned via out parameter";
}

// Called as
String^ result;
ReturnString(result);
 

Et pour les types de valeur tels que:

 void ReturnInt([Out] int% value)
{
   value = 32;
}

// Called as
int result;
ReturnInt(result);
 

Le% en fait un paramètre 'ref' et le OutAttribute indique qu'il n'est utilisé que pour les valeurs de sortie.

0voto

Greg Dean Points 12048

Ce n'est pas pris en charge. Le plus proche que vous pouvez obtenir est ref

Certes, vous pouvez le simuler, mais vous perdez une vérification du temps de compilation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X