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

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

Сообщение Anonymous »

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

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

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

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

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

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