为了解决这个问题,我有一个带有参数的宏,并使用 ->
调用它的方法。
我想扩展它来检查 null,但发现人们已经将它与智能指针一起使用,其中一些不支持转换为 bool。
其中一些智能指针具有不同命名的空值检查方法,我无权访问使用它的所有代码,因此我需要一个通用的解决方案。
我正在考虑将宏转发到某个模板函数,但我不确定如何完全通用地做到这一点。
最佳答案
如果它与 ->
一起使用,并且它通过返回内部指针的 operator->
工作,那么也许您可以将它与 NULL 进行比较
:
if(ptr.operator->() == NULL) throw std::invalid_argument("The pointer points to nowhere");
好的,所以如果'smart pointers'返回'smart pointers',我们需要更深入:
template<typename T> bool isNull(T *t) { return t == NULL; }
template<class T> bool isNull(T const &t) { return isNull(t.operator->()); }
可怕而有效(但需要 const
限定的 operator->
重载。
关于c++ - 检查智能指针是否为空的模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50055715/