假设我有这个通用函数:

template<typename T>
void foo(T data) {
  if(data == nullptr)
   return;
  //...
}


问题是我真的不能写这样的东西。如果T是原始类型或按值传递的对象,则无法将其与nullptr进行比较。

另一方面,如果T是一个指向int的指针怎么办?我希望能够将其与nullptr进行比较。

有什么办法吗?

最佳答案

正如@j_random_hacker所建议的,只需重载foo()函数。这样,根据传递给foo()的类型,您会有2种不同的行为

template<typename T>
void foo(T *data)
{
  if(data == nullptr)
    return;
  //...
}

template<typename T>
void foo(T data)
{
  //...
}

关于c++ - 带有模板和nullptr的C++通用编程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24426368/

10-13 00:01