Функция шаблона - PullRequest
       3

Функция шаблона

2 голосов
/ 06 мая 2011

Кто-нибудь может описать следующую декларацию?

template<> float func<float>(char *txt)
{
blah blah 
}

Для чего нужен второй <>?

Ответы [ 2 ]

13 голосов
/ 06 мая 2011

template<> означает, что эта функция является шаблонной специализацией.Второй <float> означает, что это специализация для float.

Например:

#include <iostream>

template <class T> void somefunc(T arg) {
    std::cout << "Normal template called\n";
}

template<> void somefunc<float>(float arg) {
    std::cout << "Template specialization called\n";
}

int main(int argc, char *argv[]) {
    somefunc(1); // prints out "Normal template called"
    somefunc(1.0f); // prints out "Template specialization called"

    return 0;
}
2 голосов
/ 06 мая 2011

Это специализированная функция шаблона.Это происходит, когда вы пытаетесь специализировать универсальную шаблонную функцию.Обычно у вас будет другое замедление как

template<typename T> float func(char *txt) {
    T vars[1024];
    blah blah
}

Это случается, когда вы хотите сделать специальное объявление для определенного типа T. В предыдущем примере, если T является типом bool, вы можете изменить поведение varsмассив для экономии места (потому что каждая запись bool может занимать 32 бита).

template<> float func<bool>(char *txt) {
    int vars[32];
    blah blah
}

Определяя специализированную версию, вы можете манипулировать массивом vars побитовым способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...