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

Mic*_*ael 2 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;

}
Run Code Online (Sandbox Code Playgroud)

Pio*_*cki 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;
}
Run Code Online (Sandbox Code Playgroud)