【发布时间】:2014-06-26 08:58:43
【问题描述】:
假设我有这个通用函数:
template<typename T>
void foo(T data) {
if(data == nullptr)
return;
//...
}
问题是我不能真正写出那样的东西。如果 T 是原始类型或值传递的对象,我无法将其与 nullptr 进行比较。
另一方面,如果 T 是一个指向 int 的指针呢?我希望能够将它与 nullptr 进行比较。
有什么办法吗?
【问题讨论】:
-
将模板改为
foo(T * data)。 -
我想过,但我想要普通值和指针作为 T。也许我所要求的无法完成(就像在 Java 中一样)。问题是如果我将 T 设置为 int* 之类的值,我的编译器会接受对 foo(nullptr) 的调用而不会抱怨。它应该阻止我这样做吗?
-
你想要
if (data == T{})吗? -
对不起,我不知道那个表达的意思。我希望类类型和指针类型都可以绑定到 T。问题是我无法将类类型(值)与 nullptr 进行比较。
-
@Kami:不清楚你想做什么。 (我对你为什么认为编译器应该阻止你调用
foo<int*>(nullptr);感到特别困惑——你为什么认为它应该阻止你?)如果你想要foo()的两个版本,一个将采用指针类型和测试它们针对nullptr和一个将采用非指针类型(而不是再次测试它们nullptr),然后您可以制作2 个重载函数模板。
标签: c++ templates generic-programming nullptr