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

Variadic templates

06.07.2018, 21:03. Показов 1220. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
typedef function<double(double ...)> fun;
 
inline int sum() {
    return 0;
}
 
template <typename ... Types>
double sum(double a,Types ... args)
{
    return a+sum(args...);
}
 
int main(int argc, char** argv)
{
    fun f = sum; // 
    cout << sum(1, 2, 3, 4.1) << endl;
    system("pause");
    return 0;
}
Ошибка компиляции:
инициализация: невозможно преобразовать "overloaded-function" в "std::function<double (double,...)>"
Ни один конструктор не смог принять исходный тип, либо разрешение перегрузки конструктора неоднозначно

Подскажите как правильно реализовать данное преобразование
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.07.2018, 21:03
Ответы с готовыми решениями:

Variadic Templates - как обращаться к аргументам variadic-функции?
Всем привет! Наверное, рано мне ещё с моими скудными знаниями в это лезть, но, изучив шаблоны и вариадик-функции, я, естественно, горю...

Variadic templates
как можно сделать чтобы функция принимала бесконечное количество объектов std::string? (только их) я пробовал вот так: template&lt;const...

Variadic templates
А как бы так исхитриться, чтобы шаблонная функция, использующая Variadic templates узнала размер передаваемых ей параметров с тем, чтобы,...

6
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
06.07.2018, 21:36
Что то типа такого надо?

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>
#include <functional>
using namespace std;
 
template<typename ...Args>
using fun = function<double(Args...)>;
 
inline int sum() {
    return 0;
}
 
template <typename ... Types>
double sum(double a,Types ... args)
{
    return a+sum(args...);
}
 
int main(int argc, char** argv)
{
    fun<double,int,int,double> f = sum<int,int,double>;
    cout << f(1, 2, 3, 4.1) << endl;
   
    return 0;
}
http://rextester.com/DCDE95754
0
0 / 0 / 1
Регистрация: 25.12.2015
Сообщений: 6
06.07.2018, 22:11  [ТС]
Большое спасибо
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
06.07.2018, 22:13
Я конечно не знаю что вы пишете, но на мой взгляд тут std::function лишний. Сумму можно посчитать и без него.
0
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
07.07.2018, 10:53
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <type_traits>
 
template <typename...Args>
std::common_type_t<Args...> summ(Args&&...args)
{
    std::common_type_t<Args...> s{};
    auto l={((s+=std::forward<Args>(args)),0)...};
    (void)l;
    return s;  
}
 
int main()
{
   std::cout << summ(1, 2, 3, 4.1) <<std::endl;
}
В С++17 ещё проще с помощью fold expression

C++
1
2
3
4
5
template <typename...Args>
constexpr auto summ(Args&&...args)
{
    return (std::forward<Args>(args) + ...);  
}
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
07.07.2018, 17:28
Undisputed, а почему не так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
inline double sum() {
    return 0.0;
}
 
template <typename T, typename ... Types>
double sum(T a,Types ... args)
{
    return a+sum(args...);
}
 
int main(int argc, char** argv)
{
    cout << sum(1, 2, 3, 4.1) << endl;  
    return 0;
}
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
07.07.2018, 18:19
TRam_,
Согласен что так лучше, даже говорил об этом ТС.
Цитата Сообщение от Undisputed Посмотреть сообщение
Я конечно не знаю что вы пишете, но на мой взгляд тут std::function лишний. Сумму можно посчитать и без него.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.07.2018, 18:19
Помогаю со студенческими работами здесь

Variadic Templates
проблема только в переводе на русский, обычно это &quot;Шаблоны с переменным числом аргументов&quot; но такое длинное выражение долго не...

Variadic templates
1. как можно сделать чтобы передавались ссылки на переменные? (с variadic templates) 2. как вообще обращаться к переменным объявленным...

Variadic templates fail
Здравствуйте. У меня проблема, нужно реализовать в проекте функционал, который будет использовать шаблоны с переменным количеством...

Result_of + variadic templates
Как здесь можно вывести возвращаемый тип функторов? res_t должен получиться типом которым они параметризуются.template &lt;typename ......

Variadic templates локальные переменные
Еще один вопрос по Variadic templates. Решаю следующую задачу: Необходимо сохранить в памяти функцию с набором параметров для...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
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 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru