Ich habe einige Funktionen zu konvertieren, die ich verwende, um eine 2D-Variante SAFEARRAY in verschiedene STL-Container zu konvertieren, ein bisschen wie so (nur illustrativ)Allgemeinfunktionsvariante SAFEARRAY STL-Container
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;
}
ich glaube, es ist nicht ein sehr C++ - eine Art und Weise, das zu tun, und es bedeutet, dass es eine separate Funktion für jeden STL-Container gibt, in den ich konvertiere.
Meine Idee war es, einen Wrapper und benutzerdefinierten Iterator für CComSafeArrays zu schreiben, so konnte ich nur tun ...
std::copy(srcComArray.begin(), srcComArray.end(), destContainer.begin());
aber habe nie einen Iterator geschrieben vor und ist ein Anfänger ich, wenn es nicht wirklich wissen, wird einfach sein.
Ist ein benutzerdefinierter CComSafeArray-Iterator meine beste, standardmäßige C++ - ähnliche Option (in diesem Fall bin ich sicher, dass ich ein gutes Tutorial zum Schreiben eines Iterators finden kann)? Oder gibt es einen anderen Weg?
Boost ist keine Option.
TIA
Ihr Iterator ist nicht kopierbar, aber das ist reparierbar, indem Sie 'container' von einer Referenz auf einen Zeiger umschalten. –
@MooingDuck guten Fang, wird behoben – PiotrNycz
Arbeitete wie ein Charme, danke :-) – Sparkles