Listes d'arguments de variable (...) (C++/CLI)

Cet exemple montre comment utiliser la syntaxe ... dans C++/CLI pour implémenter des fonctions qui ont un nombre variable d’arguments.

Remarque

Cette rubrique concerne C++/CLI. Pour plus d’informations sur l’utilisation de la ... norme ISO C++, consultez les modèles Ellipsis et les modèles variadiciques et les arguments Ellipsis et les arguments par défaut dans les expressions Postfix.

Le paramètre qui utilise ... doit être le dernier paramètre dans la liste de paramètres.

Exemple

Code

// mcppv2_paramarray.cpp
// compile with: /clr
using namespace System;
double average( ... array<Int32>^ arr ) {
   int i = arr->GetLength(0);
   double answer = 0.0;

   for (int j = 0 ; j < i ; j++)
      answer += arr[j];

   return answer / i;
}

int main() {
   Console::WriteLine("{0}", average( 1, 2, 3, 6 ));
}
3

Exemple de code

L’exemple suivant montre comment appeler une fonction Visual C++ qui accepte un nombre variable d’arguments à partir de C#.

// mcppv2_paramarray2.cpp
// compile with: /clr:safe /LD
using namespace System;

public ref class C {
public:
   void f( ... array<String^>^ a ) {}
};

La fonction f peut être appelée à partir de C# ou de Visual Basic, par exemple, comme s’il s’agissait d’une fonction qui accepte un nombre variable d’arguments.

Dans C#, un argument passé à un paramètre ParamArray peut être appelé par un nombre variable d’arguments. L’exemple de code suivant est en C#.

// mcppv2_paramarray3.cs
// compile with: /r:mcppv2_paramarray2.dll
// a C# program

public class X {
   public static void Main() {
      // Visual C# will generate a String array to match the
      // ParamArray attribute
      C myc = new C();
      myc.f("hello", "there", "world");
   }
}

Un appel à f dans Visual C++ peut passer un tableau initialisé ou un tableau de longueur variable.

// mcpp_paramarray4.cpp
// compile with: /clr
using namespace System;

public ref class C {
public:
   void f( ... array<String^>^ a ) {}
};

int main() {
   C ^ myc = gcnew C();
   myc->f("hello", "world", "!!!");
}

Voir aussi

Tableaux