开发者

...array<Object^>^ args

开发者 https://www.devze.com 2022-12-17 19:03 出处:网络
I\'m reading C++/CLI. I see this stuff: Object^ CreateInstanceFromTypename(String^ type, ...array<Object^>^ args)

I'm reading C++/CLI. I see this stuff:

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;
}

When calling it:

Object^ o = CreateInstanceFromTypename(
"System.Uri,开发者_运维知识库 System, Version=2.0.0.0, "
"Culture=neutral, PublicKeyToken=b77a5c561934e089",
"http://www.heege.net"
);

What is ...array^ args? If I remove ... ,there's a complied-error:

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


Like C++, C++/CLI has a mechanism for a variable amount of arguments. That is what the ... in front of the ...array<Object^>^ parameter means.

For type safety the C++/CLI designers added managed syntax to declare the type of the variable array.

Since it's just passing that parameter to the Activator::CreateInstance() function, I would look at what variable parameters the Activator function is looking for.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号