c++ - &* 用于原始指针、迭代器和 ... std::nullptr_t

标签 c++ pointers reference nullptr

我有一个启用的模板函数(通过 std::enable_if),它的参数是一个原始指针,或者有一个 std::iterator 类别或者是一个 std::nullptr_t。在该函数中,原始指针(数据成员)设置为等于参数,如下所示:

template<class T> void myFunction(T it) 
{
    _ptr = &*it;
}

&* 适用于指针和迭代器……但它不适用于 std::nullptr_t。是否有任何解决方案可以避免编写 2 个不同的函数?

谢谢。

最佳答案

最简单的方法是将函数更改为具有两个重载,一个用于原始指针/nullptr_t,它只存储值,另一个由 SFINAE 选择用于当前实现的迭代器,但您应该注意这在某些情况下会失败(特别是如果 iterator::value_type 重载一元 operator&)。

关于c++ - &* 用于原始指针、迭代器和 ... std::nullptr_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12219915/

相关文章:

c++ - 使用引用而不是指针有哪些缺点?

python-3.x - 查找Python包中某些方法和函数的所有用法

c++ - 使用 std::ends() 和 freeze(false)

c++ - 为什么不同 TU 中的 `static` 函数不会破坏 ODR?

c - 指针差异类型(负)

macos - Swift 中来自 CGImage 的 RGB 数据

c++ - 没有正确读取字符串

c++ - 默认模板参数中的 MPL 占位符替换

c - 为什么仅分配指针的字符串复制函数不起作用?

memory-management - 我如何将 TcpStream 提供给 BufReader 然后又将其取回?