2010-01-20 5 views
1

Je suis en train de lire C++/CLI. Je vois ce genre de choses:... tableau <Object^>^args

Object^ CreateInstanceFromTypename(String^ type, ...array<Object^>^ args) 
{ 
if (!type) 
throw gcnew ArgumentNullException("type"); 
Type^ t = Type::GetType(type); 
if (!t) 
throw gcnew ArgumentException("Invalid type name"); 
Object^ obj = Activator::CreateInstance(t, args); 
return obj; 
} 

lors de l'appel:

Object^ o = CreateInstanceFromTypename(
"System.Uri, System, Version=2.0.0.0, " 
"Culture=neutral, PublicKeyToken=b77a5c561934e089", 
"http://www.heege.net" 
); 

Qu'est-ce que ... tableau^args? Si je retire ..., il y a une erreur respecté:

error C2665: 'CreateInstanceFromTypeName' : none of the 2 overloads could convert all the argument types 
1>  .\myFourthCPlus.cpp(12): could be 'System::Object ^CreateInstanceFromTypeName(System::String ^,cli::array<Type> ^)' 
1>  with 
1>  [ 
1>   Type=System::Object^
1>  ] 
1>  while trying to match the argument list '(const char [86], const char [21])' 

Répondre

0

Comme C++, C++/CLI dispose d'un mécanisme pour une quantité variable d'arguments. C'est ce que le ... devant le paramètre ...array<Object^>^ signifie. Pour la sécurité de type, les concepteurs C++/CLI ont ajouté une syntaxe gérée pour déclarer le type de la matrice de variables.

Puisqu'il s'agit simplement de passer ce paramètre à la fonction Activator::CreateInstance(), je regarderais quels sont les paramètres variables que recherche la fonction Activator.