例如,我有一个元组
std::tuple<T0, T1, T2> tp;
其中T0,T1和T2从T继承。我想得到它的元素的基类指针,如
T* get(i)(tp);
除了
(T*)(&std::get<i>(tp));
答案 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);
}
由于T0
,T1
和T2
派生自T
,因此您无需使用强制转换。
您可能还想为std::tuple<T0, T1, T2> const &
重载此函数,在这种情况下函数将返回T const*
。