当我想实现一个功能时:
template <typename TIterator>
void doSomething(TIterator begin, TIterator end);
能够与两者一起工作:
std::vector<Widget*>
和
std::vector<std::shared_ptr<Widget>>
我应该如何访问底层指针?由于某种原因std::shared_ptr<Widget>
不能隐式转换为Widget*
,我必须使用该get()
函数。这样,代码就不起作用了,std::vector<Widget*>
因为Widget*
没有get()
功能。
我要做的是:
void functionAcceptingPointer(Widget* widget);
template <typename TIterator>
void doSomething(TIterator begin, TIterator end);
{
std::map<double, decltype(&(**begin))> map;
...
auto firstPointer = &(**begin);
...
functionAcceptingPointer(&(**begin));
....
}
每当我需要一个普通指针时,即使用双重取消引用*
后跟运算符。&
它可以完成这项工作,但我很好奇是否有一些更易读、更常用的方法来做到这一点,以及在我用丑陋的东西填充我的代码后是否有一些事情会回来困扰我&(**begin)