用于检查智能指针是否为空的模板函数

时间:2018-04-27 05:23:17

标签: c++ c++03

为了构建问题,我有一个带参数的宏,并使用->在其上调用方法。

我想扩展它以检查null,但发现人们已经使用智能指针,其中一些不支持转换为bool。

其中一些智能指针具有不同命名的空值检查方法,而且我无法访问使用它的所有代码,因此我需要一个通用的解决方案。

我在考虑将宏转发给某些模板函数,但我不确定如何完全通用。

1 个答案:

答案 0 :(得分:0)

如果它与->一起使用,并且该作品通过返回内部指针的operator->工作,那么您可以将其与NULL进行比较:

if(ptr.operator->() == NULL) throw std::invalid_argument("The pointer points to nowhere");

好的,如果有智能指针'返回'智能指针',我们需要更深入:

template<typename T> bool isNull(T *t) { return t == NULL; }
template<class T> bool isNull(T const &t) { return isNull(t.operator->()); }

可怕且有效(但需要const - operator->的限定重载。