Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

нужен совет программистов!

22.01.18 12:49
Re: нужен совет программистов!
 
Van Doren коренной житель
Van Doren
в ответ zucchero 22.01.18 12:35

Это одно из применений шаблонов, да. Мы избегаем повторного написания функции для всех типов , которые мы используем. Вместо этого мы пишем одну шаблонную функцию, а компайлер за нас инстанциирует (то бишь генерирует) эту функцию для используемых нами типов.

Ещё одно использование - параметризация функции. Пример (здесь мы с помощью шаблона параметризуем размер используемого массива):

template< size_t N >  // optimal N = 16-128K
std::string load_file( const char* filename )
{
    std::ifstream ifs( filename, std::ios::binary | std::ios::in );
    std::tr1::array< char, N > buffer;
    std::string s;
    ifs.seekg( 0, std::ios::end );
    s.reserve( ifs.tellg() );
    ifs.seekg( 0 );
    while( ifs )
    {
        ifs.read( buffer.data(), buffer.size() );
        s.append( buffer.data(), ifs.gcount() );
    }
    return s;
}


Ещё одно использование - вывод типов, но это такие дебри куда новичку лучше не лезть. В С++ отсутствует рефлексия, поэтому шаблонами злоупотребили для получения разной информации о типах... Более того, даже целый парсер-генератор накатали на шаблонах. Это прикольно, но тоже не для новичков.


А что касается алгоритмов, вот есть хорошая книжка по соревновательному программированию, там рассмотрены большинство существующих алгоритмов http://vandoren.strana.germany.ru/cp3.pdf

 

Перейти на