LINUX.ORG.RU

История изменений

Исправление quasimoto, (текущая версия) :

А какая вообще магия там должна быть, что зависимость линейная от NUM_ITEMS? Результат от Print на GenList* -(implicit upcast)-> IBase* -(dynamic_cast)-> CRTP<NullItem>* в итоге (NUM_ITEMS - 1).

Если сделать

template <> struct TypeRelId<IBase, GenList> { enum { value = 0 }; };
template <> struct TypeRelId<IBase, CRTP<NullItem>> { enum { value = 0 }; };

т.е. static_cast с проверкой, то результат тот же, линейной зависимости больше нет — константно, быстрее в over дофига раз (~10^6?).

Исходная версия quasimoto, :

А какая вообще магия там должна быть, что зависимость линейная от NUM_ITEMS? Результат от Print на GenList* -(implicit upcast)-> IBase* -(dynamic_cast)-> CRTP<NullItem>* в итоге (NUM_ITEMS - 1).

Если сделать

template <> struct TypeRelId<IBase, GenList> { enum { value = 0 }; };
template <> struct TypeRelId<IBase, CRTP<NullItem>> { enum { value = 0 }; };

т.е. static_cast с проверкой, то линейной зависимости больше нет — константно, быстрее в over дофига раз (~10^6?).