void Module::AddHandler(AHandler* pHandler)
{
POSITION pos = m_AHandlerPtrList.Find(pHandler);
if (pos != NULL) return;
m_AHandlerPtrList.AddTail(pHandler);
}

void Module::RemoveHandler(AHandler* pHandler)
{
POSITION pos = m_AHandlerPtrList.Find(pHandler);
if (pos != NULL) return;
m_AHandlerPtrList.RemoveAt(pos);
}

void Module::AddHandler(BANMHandler* pHandler)
{
POSITION pos = m_BHandlerPtrList.Find(pHandler);
if (pos != NULL) return;
m_BHandlerPtrList.AddTail(pHandler);
}

void Module::RemoveHandler(BANMHandler* pHandler)
{
POSITION pos = m_BHandlerPtrList.Find(pHandler);
if (pos != NULL) return;
m_BHandlerPtrList.RemoveAt(pos);
}


이걸 쉽게 하려면
디파인 하나 선언해서 사용해

이런식으로.
#define Check(handlerlist , handler) \\
     POSITION pos = handlerlist.Find(handler); \\
  if(pos!=NULL)\\
     return;

사용법은.


void Module::AddHandler(AHandler* pHandler)
{
Check(m_AHandlerPtrList , pHandler);
m_AHandlerPtrList.AddTail(pHandler);
}

void Module::RemoveHandler(AHandler* pHandler)
{
Check(m_AHandlerPtrList , pHandler);
m_AHandlerPtrList.RemoveAt(pos);
}

void Module::AddHandler(BANMHandler* pHandler)
{
Check(m_BHandlerPtrList, pHandler);
m_BHandlerPtrList.AddTail(pHandler);
}

void Module::RemoveHandler(BANMHandler* pHandler)
{
Check(m_BHandlerPtrList, pHandler);
m_BHandlerPtrList.RemoveAt(pos);
}

간단하지?