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

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

02.04.2021, 03:57. Показов 1835. Ответов 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
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
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
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
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. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru