Такая вещь была бы возможна только в том случае, если tuple<A, B, C>
хранилось внутри как нечто, эквивалентное ячейке cons:
struct __tuple_A_B_C {
A car;
tuple<B, C> cdr;
A& head() { return car; }
tuple<B, C>& tail() { return cdr; }
};
Но это не так - все, что вы знаете, это то, что у вас есть подобъекты типов A
, B
и C
. Их расположение полностью не определено - и вы точно не знаете, используют ли реализации такую рекурсию для реализации tuple
. Им позволено, но я не уверен, что кто-либо сделает.
Лучшее, что вы могли бы сделать, это дать tuple<A, B, C>
возврат tuple<B&, C&>
. В C ++ 17 это не так плохо для реализации:
template<class Head,class ...Tail>
struct elem{
std::tuple<Head,Tail...> dm;
auto tail() {
return std::apply([](auto&, auto&... rest){
return std::tie(rest...);
}, dm);
}
};
<ч />
Но если вы действительно хотите этот рекурсивный подход, похожий на соты, вам, вероятно, лучше реализовать собственную рекурсию, чтобы получить желаемое поведение:
template <class Head, class... Tail>
struct elem {
Head head;
elem<Tail...> tail;
};
template <class Head>
struct elem<Head> {
Head head;
};
Зависит от того, что вы на самом деле делаете.