为了构建问题,我有一个带参数的宏,并使用->
在其上调用方法。
我想扩展它以检查null,但发现人们已经使用智能指针,其中一些不支持转换为bool。
其中一些智能指针具有不同命名的空值检查方法,而且我无法访问使用它的所有代码,因此我需要一个通用的解决方案。
我在考虑将宏转发给某些模板函数,但我不确定如何完全通用。
答案 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->
的限定重载。