C ++模板:如何通过std :: is_pointer有条件地删除值

时间:2014-12-22 14:44:21

标签: c++ templates

在我做的一般容器的析构函数中,我尝试删除元素,如果它们是指针,所以我尝试下面。但是,当我使用T = double进行测试时,编译器显示错误消息,即删除必须后跟指针。我该怎么做呢?

template<class T> static void deleteIfPointer(T t)
{

    if(std::is_pointer<T>::value)
    {
        std::cout << "is pointer" << std::endl;
        delete t;
    }
    else
        std::cout << "not pointer" << std::endl;

}

1 个答案:

答案 0 :(得分:8)

template <class T>
static void deleteIfPointer(const T& t)
{
    std::cout << "not pointer" << std::endl;
}

template <class T>
static void deleteIfPointer(T* t)
//                           ^
{
    std::cout << "is pointer" << std::endl;
    delete t;
}