Ну я пишу в определении внешней функции тип B или тип C, или их общий тип А, а то из дискуссий не понятно как она работает, буду рад для общей картины чуть подробнее увидеть пример.
А как сделать такое на хаскель: функция принимает какой то общий тип, но потом в теле функции надо вызвать нужную перегрузку другой функции в зависимости от типа изначального аргумента?
Во первых у вас (множественное число) в комментах смешался хаскель и раст. Как раз судя по статье в хаскеле не обязательно (поправьте если что я хаскель не знаю) указывать ограничение на типы аргументов функций и он может вывести их в некоторых случаях сам, а в раст обязательно. Допустим в статье хаскель понял что аргумент должен быть Foldable + Ord + Num.
Во вторых для завтипов есть вопрос, что все ограничения наверное будет сложно перечислять явно и лучше иметь функционал авто вывода этих ограничений, разве не так?
Не знаю про Хаскель к сожалению, имел ввиду что можно делать if constexpr или какой-то другой условный переход для мета программирования, что отличается от макросов раста, в том числе процедурных.
Спасибо за подробности, но почему нельзя было просто subscribers.HandleEvent()... или сделать опять же initializer_list и обойти через for? Я очень редко использую variadic templates поэтому не знаю нюансов. Наверное первый мой вариант не скомпилируется а вот накладывает ли какие то дополнительные расходы второй я не знаю.
А если это const generics? в расте к сожалению перегрузка по ним не работает.
Ну я пишу в определении внешней функции тип B или тип C, или их общий тип А, а то из дискуссий не понятно как она работает, буду рад для общей картины чуть подробнее увидеть пример.
А как сделать такое на хаскель: функция принимает какой то общий тип, но потом в теле функции надо вызвать нужную перегрузку другой функции в зависимости от типа изначального аргумента?
Во первых у вас (множественное число) в комментах смешался хаскель и раст. Как раз судя по статье в хаскеле не обязательно (поправьте если что я хаскель не знаю) указывать ограничение на типы аргументов функций и он может вывести их в некоторых случаях сам, а в раст обязательно. Допустим в статье хаскель понял что аргумент должен быть Foldable + Ord + Num.
Во вторых для завтипов есть вопрос, что все ограничения наверное будет сложно перечислять явно и лучше иметь функционал авто вывода этих ограничений, разве не так?
Давайте отделять мух от котлет т.е. прод от технологий и брать последний релиз компилятора за общий знаменатель.
1) Если есть одинаковые елементы
2) [56., 15., 10., 77.1, 55., 21., 11., 52., 47., 5., 41., 92., 26., 83., 27., 43., 88., 45., 77.2, 36.] например такой рандом
Ваш код работает не правильно
Паника это не Undefined Behaviour
Не знаю про Хаскель к сожалению, имел ввиду что можно делать
if constexprили какой-то другой условный переход для мета программирования, что отличается от макросов раста, в том числе процедурных.Есть один момент, что отличает плюсовые темплейты от манипуляторов AST — это интеграция с constexpr значениями.
Все равно императивное решение не догнать
А как будет работать RA итератор поверх отфильтрованного вектора? Хранить где-то индексы или фильтровать каждый раз заново?
Ну аллокаций все равно много, по вектору на каждый вызов рекурсии
чтобы было заметнее вставлю кодом с вашего позволения
на раст можно было так
Зачем писать swap когда он есть в std
Спасибо за подробности, но почему нельзя было просто
subscribers.HandleEvent()...или сделать опять же initializer_list и обойти через for? Я очень редко использую variadic templates поэтому не знаю нюансов. Наверное первый мой вариант не скомпилируется а вот накладывает ли какие то дополнительные расходы второй я не знаю.После этого ответа я подумал что опять не заметил что перевод, но нет :)
Ага, тогда у вас по сути девиртуализация через crtp только variadic crtp получился?
И другой вопрос почему не происходит девиртуализация в втором варианте? А если собирать lto или поставить final?