... array <Object ^> ^ args - PullRequest
       9

... array <Object ^> ^ args

1 голос
/ 20 января 2010

Я читаю C ++ / CLI. Я вижу эти вещи:

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

1 Ответ

0 голосов
/ 20 января 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...