История изменений
Исправление 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?).