c++ - 检查智能指针是否为空的模板函数

标签 c++ c++03

为了解决这个问题,我有一个带有参数的宏,并使用 -> 调用它的方法。

我想扩展它来检查 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/

相关文章:

c++ - Qt Creator - 无法使用调试器 : program. exe 不是可执行格式:无法识别文件格式

c++ - 从另一个模板结构继承的模板结构

c++ - 什么数据类型的结构具有最大大小且元素是 FIFO?

c++ - C++11在效率上是否比C++03快?

c++ - C++ 标准容器的线程安全

c++ - C++03 保证 `double` 准确表示小整数吗?

c++ - 放大影响独立 IE 的嵌入式 IE

C++ 如何替换代码中不寻常的引号

c++ - C++中的PQexecParams,查询错误

c++ - 静态变量和初始化