Распределение по типу Boost занимает линейное время? - PullRequest
2 голосов
/ 29 января 2010

Насколько эффективна диспетчеризация при надстройке :: вариант?

Если это оператор switch, он должен занять всего O (1) времени, но, насколько я знаю, шаблон metaprogrammign может генерировать только if, что привело бы к диспетчеризации boost :: variable во время выполнения O (n). где n = количество типов в варианте.

Может ли кто-нибудь подтвердить / опровергнуть / просветить меня по этому поводу?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 29 января 2010

Глядя на источник, это должно быть постоянное время. Boost использует Boost.PreProcessor для генерации таблицы переключателей и отслеживает, к какому индексу он должен перейти (через сохраняемый тип).

0 голосов
/ 29 января 2010

но, насколько мне известно, шаблон metaprogrammign может генерировать только if, что поставит диспетчеризацию boost :: variable при накладных расходах времени выполнения O (n),

Нет: метапрограммирование шаблона if s оценивается во время компиляции , поэтому, если накладные расходы определяются метапрограммированием шаблона, это будет издержки времени компиляции . В этом случае накладные расходы будут постоянными.

Предостережение: я не знаю, как работает boost::variant отправка. Но , если реализован с использованием времени компиляции if, он будет вести себя так, как описано выше.

...