LINUX.ORG.RU

C++ удалить последний элемент из списка

 


0

2

Нужно дропнуть последний параметр из (auto…). Это

constexpr auto func(auto... args, auto arg) { return sizeof...(args); }
static_assert(func(0) == 0);
static_assert(func(0, 1) == 1);  // err: expected 1 arg, 2 provided

не работает. Есть какие-то варианты кроме двух разворотов?

Заодно интересно было бы посмотреть, как отрезать первые n параметров. Ну кроме банального

template<auto n> constexpr auto func(auto arg, auto... args) { return n ? func<n - 1>(args...) : call_something(args...); }
qweururu
() автор топика

Под капотом вся эта магия есть ни что иное как работа со списком в любом функциональном языке, где язык это С++ шаблоны, а значения это С++ типы. Так что задача сводится к «как дропнуть последний элемент в списке в Haskell/OCaml/F#/Scala/Whatever».

anonymous
()
Ответ на: комментарий от anonymous

Под капотом вся эта магия есть ни что иное как работа со списком

Нет.

в любом функциональном языке

Ничего подобного нет. Списки никакого отношения к этим яызкам не имеют. Их там даже не существует как и работы с ними.

Изначально односвязыный список это базовый ссылочный примитив. Особенно он популярен в скриптовых гц-языках производным которых является фп. Но там список используется не по этой причине, а потому что это рекурсивная струткура данных и она ложится на рекурсивные присядания фп вызванные их крайней скудными возможностями.

Пак в цпп не является списком ни в какой вселенной. Ты просто ничего с ним не можешь делать. Это особенность реализации. Которую, кстати, недавно исправили.

Поэтому то, что ты где-то в интеренете слышал про цпп про похожесть обусловленно именно рекурсивными присяданиями. Только вот они никак не связаны со споиском. Там нигде список не обходится и ничего с ним не делается.

Рекурсия в цпп имеет вообще иную природу. В этом плане она похожа на фп - слабостью реализации обусловлена родовая травма, которая обуславливает генерировать шаги не через циклы, а через рекурсию. Но если в фп это именно что родовая травма, то в цпп просто собенность реализации. Хотя фп-немощ пытается тащить циклы, которые там нихрена не работают.

В цпп работает всё, но циклов нет в реализации.

anonymous
()