Re[3]: Пример использования шаблонов для оптимизации
От: Evgeny.Panasyuk Россия  
Дата: 23.02.15 20:08
Оценка:
Здравствуйте, chaotic-good, Вы писали:

CG>Мой поинт в том, что многие программисты просто недооценивают возможности компилятора и переусложняют код из-за этого, пытаясь оптимизировать раньше времени то, что компилятор может соптимизировать без них. Хороший пример это т.н. статический полиморфизм. "Эксперты" любят писать сложный код с CRTP, хотя если конкретный тип объекта может быть выведен статически, компилятор может девиртуализировать вызовы и получится тот же самый результат — статический вызов, но только без использования сложных шаблонов (a-la CRTP) и кучи кода в хедерах.


Код со статическим/параметрическим полиморфизмом зачастую получается не только быстрее, но и проще. Несколько раз упомянутый тобой CRTP используется только в некоторых специфических случаях, в то время как для статического полиморфизма зачастую достаточно обыкновенной перегрузки, которая очевидно проще чем виртуальные вызовы и прочие индерекции, плюс value-semantic автоматически сохраняется (её можно получить и для динамического полиморфизма, но для этого требуется много движений).
Например попробуй переписать partition_point через динамический полиморфизм, и мы сравним:
template<typename I, typename P>
I partition_point(I first, I last, P p)
{
    while(first != last)
    {
        I middle = next(first, distance(first, last)/2);
        if( p(*middle) )
            last = middle;
        else
            first = next(middle);
    }
    return first;
}


CG>Я просто поспорил кое с кем о том, что использование шаблонов "для скорости" это в 99% случаев ошибка (если это не класс-контейнер).


Ошибка какого рода? Не добавляет скорости или "производительность в базу упирается"?

CG>Пока что местные программисты не смогли меня убедить в обратном


А что тебя сможет убедить? Какой-то пример или что?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.