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);
}

由于和派生自T0,因此您不需要使用强制转换。T1T2T

您可能还想重载这个函数,std::tuple<T0, T1, T2> const &在这种情况下函数将返回T const*

于 2013-04-08T15:39:11.073 回答