Шаблон функции явной специализации Stack Overflow

В моей книге упоминаются два способа явной специализации:

template <> void Swap<int> (int &, int &);
template <> void Swap(int &, int&);

в чем разница между обоими? когда использовать один и когда использовать другой? что именно <> после имени функции?

4

Решение

в чем разница между обоими?

Нет никакой разницы.

Во втором случае вы позволяете компилятору выполнять тип вычета от подписи специализации. Поэтому обе формы декларируют специализацию Swap<T>() за T = int,

когда использовать один и когда использовать другой?

На ваше усмотрение, когда та или иная форма соответствует вашим требованиям с точки зрения читабельности или простоты обслуживания.

что именно <> после имени функции?

Когда речь идет о после имени функции, это синтаксис для указания аргументов шаблона:

template<typename T = double, typename U = char>
void foo();

foo<int, bool>(); // Specifies explicit template arguments
foo<>(); // Use default template arguments
foo(); // Same as above, allowed for *function* templates only

Когда речь идет о после template ключевое слово, это синтаксис для введения специализации шаблона (класса или функции).

3

Другие решения

Первый пример — это реальный способ явной специализации шаблона, второй пример — всего лишь ярлык для первого пути, поскольку компилятор может определить сам тип из сигнатуры функции. Результат тот же, нет никакой разницы.

<>используется для присвоения параметра шаблона шаблонной структуре, в этом случае параметр шаблона является типом манипулируемых данных, а специализация — типом int,

1

По вопросам рекламы [email protected]