c++ - 干掉只有 const 不同的代码

标签 c++ constants dry

有没有办法干掉它(不用宏)?

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/

相关文章:

c++ - 多平台原子增量

c++ - 如何在现代 C++ 中使用生成器初始化 const 容器?

rust - 如何避免 Rust 中的 impl 重复?

c++ - 使用 Qt 检查键是否已关闭

c++ - 如何在 C++ 中找到 txt 文件的编码?

c++ - 显式模板实例化和转发引用

c++ - 如何像 C++ const/constexpr 一样定义 CUDA 设备常量?

haskell - 如何在 Haskell 中将资源编译为二进制文件?

Python 2.7 访问父类(super class)属性不是 DRY?

asp.net - DRY 原则在 ASP.NET MVC 中实际上是什么样的?