C ++模板类型是否为指针

时间:2010-10-07 16:04:04

标签: c++ templates pointers

  

可能重复:
  Determine if Type is a pointer in a template function

我正在寻找一种方法来确定模板在编译时是否是指针。因为当T不是指针时,程序将无法编译,因为您无法删除普通类型变量。

template <typename T>
void delete(T &aVar)
{
   // if T is a point
   delete aVar;
   aVar = 0;
   // if T is not a point, do nothing
}

基本上,我正在学习自己创建链接列表(不使用STL列表)。我尝试在列表中使用模板,因此它可以采用任何类型。当类型是指针时,我想通过析构函数自动删除它(关键字delete)。

问题是,如上所述,当我使用int而不是列表中某个类的某个指针时,VC2010将无法​​编译,因为您无法删除无指针变量。所以我正在寻找一种方法,比如宏,当根据模板类型删除aVar时应该编译

2 个答案:

答案 0 :(得分:3)

如果让这个函数取T *而不是T?

答案 1 :(得分:2)

这是一个方便的实用程序,但我认为最好习惯在使用原生NULL后分配delete

要获得仅考虑可修改指针类型参数的函数,请使用

template< typename T > // The compiler may substitute any T,
void delete_ref( T *&arg ); // but argument is still a pointer in any case.

要简单地找出某个类型是否为指针,请在Boost,TR1或C ++ 0x中使用is_pointer中的<type_traits>