mam pewne funkcje, które używam do konwersji 2D wariantowej SAFEARRAY do różnych pojemników STL, trochę jak tak (tylko ilustracyjne)Generic funkcja konwersji wariantowej SAFEARRAY do kontenerów STL
template<typename T>
std::set<T> SetFromSafeArray(VARIANT srcArray)
{
CComSafeArray<T> srcComArray(srcArray.parray);
std::set<T> destContainer;
for (ULONG i=0;i<srcComArray.GetCount();++i)
destContainer.insert(srcComArray.GetAt(i));
return destContainer;
}
czuję, że nie jest to bardzo C++ - ish sposób na poruszanie się o tym i oznacza to, że istnieje oddzielna funkcja dla każdego kontenera STL, który konwertuję.
Mój pomysł był napisać otoki i niestandardowe iterator dla CComSafeArrays więc mogę po prostu zrobić ...
std::copy(srcComArray.begin(), srcComArray.end(), destContainer.begin());
ale że nigdy napisany iterator przed i będąc początkującym ja naprawdę nie wiem, czy to będzie łatwe.
Czy niestandardowy iterator CComSafeArray jest moją najlepszą, standardową opcją C++ like (w takim przypadku jestem pewien, że mogę znaleźć dobry samouczek na temat pisania iteratora)? Czy jest jakiś inny sposób, aby to osiągnąć?
Zwiększenie nie jest opcją.
TIA
Twój iterator nie jest kopiowalny, ale można go naprawić, przełączając 'container' z odwołania do wskaźnika. –
@MooingDuck dobry połów, naprawiony – PiotrNycz
Pracował jak urok, dzięki :-) – Sparkles