関数を実装したい場合:
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)