Задача · Шаблоны · урок 11 из 11
Задача: накопитель суммы
Напишите шаблон класса Tally — накопитель суммы значений типа T, поля добавьте сами. Вариативный метод template <typename... Ts> void add(Ts... xs) прибавляет к сумме все свои аргументы. T total() const возвращает сумму, а int count() const — сколько значений получили все вызовы add.
В примерах points — это Tally<int>, grams — Tally<double>, а text — Tally<std::string>:
- после
points.add(3, 4, 5)иpoints.add(10):points.total()→22,points.count()→4 - после
grams.add(1.5, 2.25):grams.total()→3.75 - после
text.add("ab", "cd")иtext.add("ef"):text.total()→"abcdef"
Ограничения: аргументы add — числа типа T или, для Tally<std::string>, текст в двойных кавычках. Строки склеиваются в порядке вызовов и аргументов, а вызов add() без аргументов ничего не меняет.