たとえば、私はタプルを持っています
std::tuple<T0, T1, T2> tp;
ここで、T0、T1、および T2 は T から継承します。その要素の基本クラス ポインターを次のように取得したい
T* get(i)(tp);
以外
(T*)(&std::get<i>(tp));
ラッパー関数は次のように記述できます。
T* get(int index, std::tuple<T0, T1, T2> & tp)
{
if ( index < 0 || index > 2 ) throw std::out_of_range("index");
else if ( index == 0 ) return &std::get<0>(tp);
else if ( index == 1 ) return &std::get<1>(tp);
else return &std::get<2>(tp);
}
sinceおよびは から派生するためT0
、キャストを使用する必要はありません。T1
T2
T
おそらく、この関数をオーバーロードしたいと思うでしょう。std::tuple<T0, T1, T2> const &
その場合、関数は を返しT const*
ます。