Re: C++/CLI - How to convert List<T> to vector<T>
"JohnR" <_no_spam@_no_spam.com> wrote in message
news:#1hpNBEQKHA.1268@TK2MSFTNGP04.phx.gbl...
Hi there,
I'm new to C++/CLI but very experierced in both C++ and .NET. Can someone
show me the basic syntax for converting a List<T> to vector<T> (or more
generally, any .NET generic to its C++ template equivalent). For now I'm
looking for a template with a signature similar to the following (note
however that "T" would also need to be converted presumably so a template
arg and a generic arg may be required). Thanks in advance.
std::vector<T> marshal_as(System::Collections::Generic::List<T> ^ const &
list)
Returning vector by value is going to have really bad performance unless you
have the move optimization.
For types which have dual managed/native identity (i.e. built-in numeric
types), something like:
template<typename T>
std::vector<T> marshal_as(System::Collections::Generic::ICollection<T>^
list)
{
if (list == nullptr) throw gcnew ArgumentNullException(L"list");
std::vector<T> result(list->Count);
for each (T& elem in list)
result.push_back(elem);
return result;
}
More generally, something like:
template<typename T>
generic<typename S>
std::vector<T> marshal_as(System::Collections::Generic::ICollection<S>^
list)
{
if (list == nullptr) throw gcnew ArgumentNullException(L"list");
std::vector<T> result(list->Count);
for each (S& elem in list)
result.push_back(marshal_as<T>(elem));
return result;
}
Not compile-tested.