2010-01-20 3 views
1

Я читаю C++/CLI. Я вижу этот материал:... array <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; 
} 

При вызове его:

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

Что ... массив^арг? Если я удалю ..., есть выполнили ошибки:

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])' 

ответ

0

Как C++, C++/CLI имеет механизм с переменным количеством аргументов. Именно это означает ... перед параметром ...array<Object^>^.

Для безопасности типов разработчики C++/CLI добавили управляемый синтаксис для объявления типа массива переменных.

Поскольку он просто передает этот параметр функции Activator::CreateInstance(), я бы посмотрел, какие переменные параметры ищут функция Activator.

Смежные вопросы