Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 16.06.2019
Сообщений: 7

Передача разного количества параметров в шаблонную функцию

21.02.2020, 14:00. Показов 792. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Подскажите, пожалуйста, что нужно изменить в даном коде, чтоб в строке 9 тоже заработала функция. То есть, передаваемых параметров может быть 2, или 3. Спасибо ВСЕМ!

C++
1
2
3
4
5
6
7
8
9
10
11
 #include <iostream>
using namespace std;
template <typename T>
T Maxi(T a, T b, T c) {
    return a > b&& a > c ? a : b > c ? b : c;
}
void main() {
    setlocale(LC_ALL, "rus");
    cout << Maxi(50, 8) << endl;
    cout << Maxi(5, 22, 13) << endl;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.02.2020, 14:00
Ответы с готовыми решениями:

Передача разного количества параметров в функцию
Добрый день Всем ! Скажите пожалуйста, есть функция которая вызывается несколько раз, но передаёт каждый раз разное количество параметров,...

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

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

9
 Аватар для Annemesski
2673 / 1335 / 480
Регистрация: 08.11.2016
Сообщений: 3,690
21.02.2020, 14:26
Либо сделать последний параметр функции параметром поумолчанию (присвоить ему какое-то значение в прототипе функции). Или оформить функцию с переменным количеством аргументов... но лучше не надо. Еще можно передавать параметры списком или вектором.
0
0 / 0 / 0
Регистрация: 16.06.2019
Сообщений: 7
21.02.2020, 14:41  [ТС]
Annemesski,
Цитата Сообщение от Annemesski Посмотреть сообщение
Либо сделать последний параметр функции параметром поумолчанию (присвоить ему какое-то значение в прототипе функции)
- но если это значение будет максимальное среди передаваемых чисел, - тогда это будет не правильный результат работы.
До списков и векторов я ещё не дошел.
Цитата Сообщение от Annemesski Посмотреть сообщение
Или оформить функцию с переменным количеством аргументов
- это интересно, но почему не рекомендуете?
0
 Аватар для Annemesski
2673 / 1335 / 480
Регистрация: 08.11.2016
Сообщений: 3,690
21.02.2020, 14:54
тогда это будет не правильный результат работы.
А если подумать, то у Вас функция поиска максимума, значит если переменной "c" присвоить значение минимально возможное для переданного типа, то результат будет правильный.
- это интересно, но почему не рекомендуете?
Потому что тогда Вам придется перед тем как вообще начать выполнять в функции действия непосредственно связанные с её назначением выполнить ряд проверок и преобразований с переданными данными, такие функции вообще появляются, как правило, не от хорошей жизни.
0
0 / 0 / 0
Регистрация: 16.06.2019
Сообщений: 7
21.02.2020, 14:59  [ТС]
Annemesski, Спасибо, Вам, что показали выход из ситуации, - буду разбиратся!
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
21.02.2020, 15:02
p_ib,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <algorithm>
#include <iostream>
 
template <typename... Args>
auto Maxi(Args... args) noexcept {
    return std::max({args...});
}
 
int main() {
    std::cout << Maxi(50, 8) << std::endl;
    std::cout << Maxi(5, 22, 13) << std::endl;
    std::cout << Maxi(5, 22, 13, 50, 8) << std::endl;
}
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
21.02.2020, 15:04
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
using namespace std;
 
template <typename T>
const T &myMax(T const &lhs, T const &rhs)
{
    return lhs>rhs? lhs : rhs ;
 
}
 
template <typename T>
const T &myMax(T const &lhs, T const &rhs, T const &last)
{
 
    return myMax(myMax(lhs, rhs), last) ;
 
}
 
int main()
{
    int ai[]{1,23, 45};
    cout<<myMax(ai[0], ai[1], ai[2]);
    return 0;
}
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
21.02.2020, 15:06
Цитата Сообщение от p_ib Посмотреть сообщение
Здравствуйте! Подскажите, пожалуйста, что нужно изменить в даном коде, чтоб в строке 9 тоже заработала функция. То есть, передаваемых параметров может быть 2, или 3. Спасибо ВСЕМ!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template <typename T>
T Maxi(T a, T b)
{
    return a > b? a : b;
}
 
template <typename T, typename... TT>
T Maxi(T a, T b, TT&&... args)
{
    return Maxi(a, Maxi(b, args...));
}
 
std::cout << Maxi(1, 2, 3, 5, 6, 0,9, 1, 1, 1, 1) << std::endl;
0
0 / 0 / 0
Регистрация: 16.06.2019
Сообщений: 7
21.02.2020, 15:18  [ТС]
Ребята, Большое Спасибо ВСЕМ за помощь!
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
21.02.2020, 15:24
Цитата Сообщение от Azazel-San Посмотреть сообщение
auto Maxi(Args... args) noexcept
auto Maxi(const Args&... args) noexcept
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.02.2020, 15:24
Помогаю со студенческими работами здесь

Функции с передачей разного количества параметров
есть код: #include &lt;iostream&gt; using namespace std; void Char(int num, char a1, char a2, ...); void Int(int num, int a1, int...

Написать перегружаемые функции умножения разного количества параметров
Помогите пожалуйста с задачей ничего не понимаю: Написать перегружаемые функции умножения разного количества параметров: 2,3,4. При...

Передача массива через указатель в шаблонную функцию
Здравствуйте. В общем есть шаблонный класс List, который является двусвязным списком: template &lt;class Type&gt; class List ...

Передача массива в шаблонную функцию, найти ошибку
#include &lt;iostream&gt; #include &lt;time.h&gt; using namespace std; template&lt;class T&gt; void init_mas(T &amp;mas, int n, int m) {srand(...

Написать шаблонную функцию, меняющую местами значения двух переданных в нее параметров
Доброго всем дня! Ребят помогите написать функцию, меняющую местами значения двух переданных в нее параметров. Еще нужно перегрузить эту...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru