&*表示原始指针,迭代器和... std :: nullptr_t

Vin*_*ent 0 c++ pointers reference nullptr

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

template<class T> void myFunction(T it) 
{
    _ptr = &*it;
}
Run Code Online (Sandbox Code Playgroud)

&*适用于指针和迭代器......但它对于std :: nullptr_t失败了.是否有任何解决方案可以避免编写2个不同的功能?

谢谢.

Dav*_*eas 5

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