1

たとえば、私はタプルを持っています

std::tuple<T0, T1, T2> tp;

ここで、T0、T1、および T2 は T から継承します。その要素の基本クラス ポインターを次のように取得したい

T* get(i)(tp);

以外

(T*)(&std::get<i>(tp));
4

1 に答える 1

0

ラッパー関数は次のように記述できます。

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、キャストを使用する必要はありません。T1T2T

おそらく、この関数をオーバーロードしたいと思うでしょう。std::tuple<T0, T1, T2> const &その場合、関数は を返しT const*ます。

于 2013-04-08T15:39:11.073 に答える