ho alcune funzioni che utilizzo per convertire una variante SAFEARRAY 2D in vari contenitori STL, un pò come così (illustrativi)funzione generica per convertire variante SAFEARRAY di contenitori 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;
}
ritengo che non è molto C++ - ish modo di andare su di esso e significa che c'è una funzione separata per ogni contenitore STL in cui mi converto.
La mia idea era quella di scrivere un iteratore involucro e personalizzato per CComSafeArrays quindi ho potuto solo fare ...
std::copy(srcComArray.begin(), srcComArray.end(), destContainer.begin());
ma avendo mai scritto un iteratore prima e di essere un novizio Io davvero non so se sarà facile.
È un iteratore CComSafeArray personalizzato, la mia migliore opzione standard C++ come (nel qual caso sono sicuro di poter trovare un buon tutorial sulla scrittura di un iteratore)? O c'è un altro modo di affrontarlo?
Boost non è un'opzione.
TIA
l'iteratore non è copiabile, ma è risolvibile passando da 'contenitore' da un riferimento a un puntatore. –
@MooingDuck buona cattura, risolverà – PiotrNycz
Ha funzionato come un fascino, grazie :-) – Sparkles