通过函数参数而不是模板参数获取元组的元素

时间:2013-04-08 15:34:55

标签: c++ tuples

例如,我有一个元组

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

其中T0,T1和T2从T继承。我想得到它的元素的基类指针,如

T* get(i)(tp);

除了

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

1 个答案:

答案 0 :(得分: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);
}

由于T0T1T2派生自T,因此您无需使用强制转换。

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