Я глубоко погрузился в новый проект, к которому обращаюсь с кучей шаблонов и их специализаций. Теперь, после дня без программирования, я задаюсь вопросом, действительно ли это стоит дополнительных строк кода.
Вопрос: в чем преимущества специализации?
Это:
template <int i> class A {};
template <> class A <1> { void foo() {/* something */} };
template <> class A <2> { void foo() {/* something else*/} };
template <> class A <3> { void foo() {/* even different*/} };
В любом случае лучше (более быстрое выполнение), чем
template <int i> class A {
void foo() {
if (i==1) {/* something */}
else if (i==2) {/* something else*/}
else if (i==3) {/* even different*/}
}
};
?
Редактировать:
Код является частью библиотеки, которую могут использовать другие. Я использую gcc 4.6.3, но в итоге код будет использоваться с разными компиляторами.
Редактировать:
Эти два фрагмента кода приводят к созданию идентичных двоичных файлов с использованием gcc 4.6.3. Я не могу протестировать весь случай, так как мой фактический код далек от использования. Это действительно кажется вопросом принципа, универсальности, возможности повторного использования, удобства обслуживания и т. Д.