注意 已修改以解决关闭原因
我需要获取一个指向我有迭代器的对象的指针。只要有一个迭代器但是需要调用一个函数(可能是第三方)来获取指针,这是必需的。
丑陋的(&*it)
(甚至it.operator->()
)真的是标准成语吗?为什么没有ptr(iterator)
喜欢
template<typename It>
inline auto ptr(It const&it) -> decltype(std::addressof(*it))
{
return std::addressof(*it);
}
支持这个的论据:
operator&
过载的类型&*it->member();
(你是否100%确定这是做什么的?它不是你想要的......)答案 0 :(得分:2)
如果您不喜欢这种奇怪的语法,可以使用此功能:
std::address_of(*it);
答案 1 :(得分:0)
我不确定,但我认为一些迭代器(例如在向量或数组中)可以简单地实现为指针。那么任何方法都是不可能的,这种语法&*it
将是通用的。
顺便说一句,如果你想要ptr(iterator)
,你可以定义类似这样的东西
template<typename T1, typename T2>
inline T1* ptr(T2 it) {
return &*it;
}
或更多“hacky”方式
#define ptr(x) (&*x)