Попытка разделить пакет параметров на две меньшие пакеты, используя индексную последовательность, а вложенные лямбдас прC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Попытка разделить пакет параметров на две меньшие пакеты, используя индексную последовательность, а вложенные лямбдас пр

Сообщение Anonymous »

Итак, я пытался придумать способ разделить заданный пакет параметров Args ... на два отдельных пакета args1 ... и args2 ... (при некотором указанном индексе, 3 в этом случае). Я также хотел как можно больше минимизировать накладные расходы (я скорее хочу избежать решений, включающих в себя экземпляры кортежей и std :: Apply , если это даже поможет).
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]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»