例如,我有一个元组
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);
}
由于和派生自T0
,因此您不需要使用强制转换。T1
T2
T
您可能还想重载这个函数,std::tuple<T0, T1, T2> const &
在这种情况下函数将返回T const*
。