Скажем, sizeof...(Ts) == N+M. Решение, которое я придумал, заключалось в том, чтобы сначала создать последовательность индексов длиной N, что позволило бы нам получить доступ к пакету I1... индексов 0, 1, ..., N-1. Я также поместил Ts... в тип кортежа и присвоил ему псевдоним tuple_t. Затем, используя вторую лямбду, я могу использовать последовательность индексов, поместив std::tuple_element_t&&... args1 в качестве первых аргументов, что заставляет первые N элементы args... соответствовать args1..., а остаток - args2.... Отсюда я теперь могу получить доступ к args1..., args2... и Ts2.... Наконец, я обернул все в третью лямбду, чтобы иметь возможность доступа к Ts1....
Код: Выделить всё
#include
template
constexpr void test(Ts&&... args) {}
template
void split_pack(Ts&&... args) {
using tuple_t = std::tuple;
[&](std::index_sequence) {
[&](std::tuple_element_t&&... args1, Ts2&&... args2) {
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79706366/trying-to-split-parameter-pack-into-two-smaller-packs-using-an-index-sequence-an[/url]
Мобильная версия