Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940

Указатель на шаблонную функцию как аргумент шаблонной функции

02.04.2021, 03:57. Показов 1821. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Тут человек спрашивал про ошибки (не до конца помог ему, в этом вопросе точно, помогите тоже, пожалуйста):
Имеется два массива, нужно вызвать функцию которая вычисляет макс элемент двух массивов
И сам я, как обычно, играться стал по вопросу.

Так вот, доигрался только до такого:
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
25
26
27
28
29
30
31
32
33
34
#include <iostream>
 
template <class T>
T foomax(T* arr, size_t size)
{
    T max = arr[0];
    while(--size) if(max < arr[size]) max = arr[size];
    return max;
}
 
template <class T, class Q>
auto max_of_2arr(T* t, size_t Tsize, Q* q, size_t Qsize, T(*tfoo)(T*, size_t), Q(*qfoo)(Q*, size_t))
{
    T tmax = tfoo(t, Tsize);
    Q qmax = qfoo(q, Qsize);
 
    return ( tmax > qmax ? tmax : qmax );
}
 
 
int main()
{
    const size_t size = 3;
    double darr[size] = { 0.1, 2.2, 2.9 };
    int iarr[size] = { 3, 2, 1 };
    
    auto x = max_of_2arr(darr, size, iarr, size, foomax, foomax);
    std::cout << x << "\n";
 
 
 
    system("pause");
    return 0;
}
Инстанцироваться функция будет от своих аргументов и, как я понял, вполне ожидаемо ждёт инстанцированного шаблона функции в аргументе.

Вопрос: можно ли тут как-то оставить лишь один аргумент для функции(max_of_2arr) без <functional> и иже?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.04.2021, 03:57
Ответы с готовыми решениями:

Указатель на функцию с аргументами, как аргумент другой функции
У меня есть некая функция, которая принимает как аргумент другую функцию typedef void(*func_type)(); start(func_type...

Аргумент в виде шаблонной функции
void Function(любая_функция_с_одним_параметром){} Как при помощи шаблона всунуть в аргумент функции, любую функцию с одним параметром,...

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

2
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
02.04.2021, 09:00
Лучший ответ Сообщение было отмечено Folian как решение

Решение

Цитата Сообщение от Folian Посмотреть сообщение
можно ли тут как-то оставить лишь один аргумент для функции(max_of_2arr) без <functional> и иже?
В такой постановке лично я не понимаю вопроса.
Ваш код выше - работает. Что за "один аргумент" нужно оставить - неясно. Можете привести пример псевдокода того, как вы хотели бы чтобы это выглядело?

Что-то такое нужно?
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
25
26
27
28
#include <iostream>
 
template <class T, class Q, typename F>
auto max_of_2arr(T* t, size_t Tsize, Q* q, size_t Qsize, F foo)
{
    T tmax = foo(t, Tsize);
    Q qmax = foo(q, Qsize);
 
    return ( tmax > qmax ? tmax : qmax );
}
 
int main()
{
    const size_t size = 3;
    double darr[size] = { 0.1, 2.2, 2.9 };
    int iarr[size] = { 3, 2, 1 };
    
    auto foomax = [](auto * arr, size_t size) {
        auto max = arr[0];
        while(--size) if(max < arr[size]) max = arr[size];
        return max;   
    };
        
    auto x = max_of_2arr(darr, size, iarr, size, foomax);
    std::cout << x << "\n";
 
    return 0;
}
1
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
02.04.2021, 14:41  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
В такой постановке лично я не понимаю вопроса.
Я косноязычный, извините.
Цитата Сообщение от DrOffset Посмотреть сообщение
Что-то такое нужно?
Да, что-то именно такое;

вообще, если подумать и переформулировать вопрос, всё сведётся к нечту вроде "как сделать указатель на неинстанцированный шаблон", т.е. бред. Спасибо.

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


Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.04.2021, 14:41
Помогаю со студенческими работами здесь

Указатель массива как аргумент функции
Я прочитал несколько алгоритмов сортировки массивов, но не совсем понял, если массив чисел будет передан в аргумент функции через...

Как в аргумент функции передать указатель на метод класса?
Как в аргумент функции передать указатель на метод класса? Метод в классе у меня статический,все равно не получается(невозможно...

Указатель на имя файла как аргумент функции. Как реализовать?
Доброго времени суток всем! Прошу помощи! Написал программу, есть пару моментов, сложных для меня. Необходимо написать две функции, одну...

Как получить указатель на первый аргумент в функции типа void Fun(.){}?
Функция выглядит так void Fun(...){}. Сложность здесь заключается в том что здесь нет аргументов за который можно ухватиться чтобы получить...

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru