有没有办法干掉它(不用宏)?
void clear_tp_vec(vector<const Tk*>& tps){
for(auto it=tps.begin();it!=tps.end();++it ){
const ValT* vp=dynamic_cast<const ValT*>(*it);
if(vp!=NULL)
delete vp;
}
tps.clear();
};
void clear_tp_vec(vector<Tk*>& tps){
for(auto it=tps.begin();it!=tps.end();++it ){
ValT* vp=dynamic_cast<ValT*>(*it);
if(vp!=NULL)
delete vp;
}
tps.clear();
};
第二个重载唯一不同的是 const 限定符(没有)。注释掉任何一个版本都会破坏我的代码。
最佳答案
您可以使用以下模板函数:
template < typename T >
void clear_tp_vec( vector< T* >& tps )
{
typedef typename conditional< is_const< T >::value, const ValT, ValT >::type OUT;
for ( auto it = tps.begin(); it != tps.end(); ++it )
{
OUT* vp = dynamic_cast< OUT* >( *it );
if ( vp != NULL )
delete vp;
}
tps.clear();
};
关于c++ - 干掉只有 const 不同的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17258829/