Я создал две функции шаблона, которые получают суммы для разных контейнеров STL: один для списка и векторный, другой для карты.Перегрузка шаблона функции vs Явная специализация
Пожалуйста, просмотрите прокомментированную строку (1) и (2) определения второй функции шаблона. Закомментированный код (= 2) также отлично работает, поэтому я не знаю, какой из них более рекомендуется.
Также, как называется каждый метод (я точно угадал в своем комментарии)? Сказать (1) - перегрузка шаблона функции, кажется, недостаточна, поскольку после ключевого слова «шаблон» отсутствует аргумент имени типа. То есть, это должно быть как template<typename T>
в сочетании с (1) для того, чтобы метод вызывался как перегрузка шаблона функции, я думаю. Пожалуйста, дайте мне свое имя.
template <typename T> // T : container
double Sum(const T &l) // get Container
{
double sum = 0;
T::const_iterator i;
for (i = l.begin(); i != l.end(); ++i) { sum += *i; }
return sum;
}
template <> // get container
double Sum(const map<string, double> &m) // (1) function template overloading
// double Sum<map<string, double> >(const map<string, double> &m) // (2) explicit specialization
{
double sum = 0;
map<string, double>::const_iterator i; // obtain Iterator from Container
for (i = m.begin(); i != m.end(); i++) { sum += i->second; } // sum. ('first' is index, 'second' is data)
return sum;
}
No (1) является шаблоном специализация и (2) является перегрузкой суммы. – coincoin