Re: simply code with templete
Hi!
the problem is the list: p = *it and map: p = it->second
Use an accessor. So in essence, you call a function, pass it the
iterator and it returns the value you want.
Thanks for your advise, I try like this:
class a
{
public:
bool IsValid(){
return false;
}
};
list<a*> m_list;
map<int,a*> m_map;
template<class T>
class wrap
{
public:
typedef typename T* Output;
typedef typename list<Output>::iterator Input1;
typedef typename map<int,Output>::iterator Input2;
Output m_p;
wrap(Input1 in1){
m_p = *in1;
}
wrap(Input2 in2){
m_p = in2->second;
}
Output operator() (){
return m_p;
}
};
template<class LIST, class T>
void removeT(LIST& m_list)
{
for(LIST::iterator it = m_list.begin(); it != m_list.end(); )
{
T* p = wrap<T>(it)();
if (!p->IsValid())
{
delete p;
it = m_list.erase(it);
}
else
++it;
}
}
void test()
{
removeT<list<a*>,a>(m_list);
removeT<map<int,a*>,a>(m_map);
}
it is work, am I right, or any better suggestion?
Best Regard.
mos.