sake 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
Теперь проблема, с которой я сталкиваюсь, заключается в том, что, хотя он компилируется и работает просто хорошо, используя Clang, она не может компилировать с помощью GCC и дает неожиданный результат, используя MSVC. < /p>
gcc дает следующую ошибку: < /p>
< /p>
Подробнее здесь: [url]https://stackoverflow.com/questions/79706366/trying-to-split-parameter-pack-into-two-smaller-packs-using-an-index-sequence-an[/url]