Re[3]: COM-коллекции
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 26.05.03 09:30
Оценка:
Здравствуйте, vitaly_spb, Вы писали:

[]

AS>>Это нужно еще Advise немного переделать.

_>А это что значит?

Это значит, что я загнался.
Имелось в виду Add — добавление объекта.

AS>>А вообще, такие вещи на map'е делать — самое то!

_>С радостью, может подскажешь как сделать это же с помощью map?

std::map<long,LPDISPATCH> m_map;

HRESULT Add(LPDISPATCH pDisp,long lId)
{
m_map[lId] = pDisp;
pDisp->AddRef();
}

HRESULT Remove(long lId)
{
  std::map<long,LPDISPATCH>::iterator ItemInMap = m_map.find(lId);
  if (ItemInMap != m_map.end()){
     ItemInMap->second->Release();
     m_map.erase(ItemInMap);
  }
}

HRESULT RemoveByNum(long idx)
{
std::map<long,LPDISPATCH>::iterator ItemInMap = m_map.begin();
std::advance(ItemInMap,idx);
ItemInMap->second->Release();
m_map.erase(ItemInMap);
}

HRESULT RemoveByRef(LPDISPATCH pDisp)
{
//тут перечислением находишь элемент и убиваешь его как в примерах выше.
}


Обработка ошибок опущена, пример писал "на коленках".
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.