LINUX.ORG.RU

[C++] Переменное количество параметров в аргументах функции

 


0

0

Как сделать сабж? Во всех примерах, которые мне попадались, мухлюют: в качестве первого параметра передают общее количество параметров, либо последним передают "-1" либо «0».

Можно ли в функции с переменным количеством параметров определить общее их число без подобных хаков?


Ответ на: комментарий от mannaz

> Вполне себе зависимость обработки аргументов от значения последнего/предпоследнего/следующего-через-3-после-текущего.

у меня другой пример: реализуем паттерн матчинг (или хотя бы свитч) в виде шаблона, и там имеется куча веток, к которым надо обращаться не последовательно строя нечто, а произвольно

мне кажется идея из запощенного куска кода может быть использована для такого произвольного доступа (вместо списка — сбалансированное дерево), правда видок у этого будет пугающий

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

вот пример статического списка без виртуальных функций

и этот человек ещё критикует использование фантомных типов!

с виртуальными функциями это делается в полпинка

с меньшим оверхедом, чем при использовании ~union?

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

> и этот человек ещё критикует использование фантомных типов!

где ты видишь у меня в примере хоть один фантомный тип? (хотя да, их идеи меня натолкнули...)

с меньшим оверхедом, чем при использовании ~union?

c виртуальными функциями оверхед примерно равен оверхеду union (а что такое ~union), а вот в моем примере вообще без оверхеда.

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от jtootf

> http://boost-sandbox.sourceforge.net/libs/proto/doc/html/index.html в это заворачивать пробовал?

да, интересно, надо почитать

но мне интересно было ручками сделать упрощенный примерчик

ведь если делать промышленную версию, то придется вытаскивать do_something_with в параметры шаблона, и я боюсь представить что там будет

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

где ты видишь у меня в примере хоть один фантомный тип?

я вижу у тебя там cons-ячейку

а что такое ~union

boost.variant, boost.any, QVariant и прочая-прочая

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

> я вижу у тебя там cons-ячейку

молодец. может ты еще увидишь там, что у нее есть конструктор и он реально используется. однако:

A phantom type is a type used only to construct other types; its values are never used.

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

а может ты перестанешь читать между строк? то, что я сравниваю уродство этого кода с использованием фантомных типов, не означает что я их тут вижу

рекомендую валерьянку, говорят помогает

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

> boost.variant, boost.any, QVariant и прочая-прочая

я не глядел им всем в потроха, но подозреваю там виртуальные вызовы

а в «языке мечты», если совсем уж помечтать, можно было бы заставить компилятор развиртуализовывать функции, а там где это невозможно, давать ошибку компиляции — при этом код получился ровно что и у меня, а запись была бы проще

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от jtootf

> а может ты перестанешь читать между строк? то, что я сравниваю уродство этого кода с использованием фантомных типов, не означает что я их тут вижу

ну-ну.

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

а мы сравним.

www_linux_org_ru ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.