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

Шаблон, который показывает можно ли сложить все элементы tuple

07.12.2019, 01:51. Показов 1955. Ответов 6

Студворк — интернет-сервис помощи студентам
Здравствуйте, мне в вузе поставили задачу реализовать шаблон, который будет проходится по tuple и искать предикат - можно ли сложить первый элемент со втором, первый с третьим ... и так далее.

Но мало того, что мне нужно как то пройтись по всему tuple, мне еще как то понимать в каких случаях элементы приводятся и могут будить просуммированы, а какие нет .

ДУмаю, что нужно использовать std::type_traits, decltype, std::declval, std::conjunction, на ум больше ничего не приходит, других пояснений мне не дали, если кто разбирается в этой теме, помогите пожалуйста


это все, что есть из моих наработок, последний шаблон не валиден (это скорее то, как я думаю, оно должно быть).
C++
1
2
3
4
5
6
7
8
9
10
11
12
#pragma once
#include<tuple>
#include<type_traits>
 
template<class T>
struct can_sum_pair : std::false_type {};
 
template<class T>
struct can_sum_tuple : std::false_type {};
 
template<class Head, class... Tail>
struct can_sum_tuple<std::tuple<Head, Tail...>> : std::conjunction<typename Head == decltype(std::declval<Head>() + std::declval<Tail>())) {};
Добавлено через 10 минут
Я посидел еще немного и пришел к этому

C++
1
2
3
4
5
6
7
8
9
#pragma once
#include<tuple>
#include<type_traits>
 
template<class T>
struct can_sum_tuple : std::false_type {};
 
template<class Head, class... Tail>
struct can_sum_tuple<std::tuple<Head, Tail...>> : std::conjunction<std::is_same<Head, decltype((T)(std::declval<const Tail&>()))>>... > {};
Но мне почему не хочется проверять работает ли оно вообще)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.12.2019, 01:51
Ответы с готовыми решениями:

SFML - ошибка "std::tuple<sf::RenderWindow>::tuple: ни одна из 2 перегрузок не может преобразовать все типы аргументов"
Хотел создать поток, передаю в функцию переменную window, где хранится игровое окно. При компиляции выдаёт такую ошибку. Открыл файл с...

Нужен ComboBox, который показывает отфильтрованные вводной строкой элементы
Нужно что-то типа комбобокса, чтобы при вводе искало в списке и показывало только те, где есть вхождения и отмечало вхождения другим...

Сложить элементы массива с произведением элементов столбца, который содержит минимальный элемент
Вывести двумерный массив A, вывести его. Преобразовать исходный массив путем сложения его элементов с произведением элементов того столбца,...

6
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.12.2019, 12:01
Лучший ответ Сообщение было отмечено DmitryK_ как решение

Решение

Цитата Сообщение от DmitryK_ Посмотреть сообщение
Здравствуйте, мне в вузе поставили задачу реализовать шаблон, который будет проходится по tuple и искать предикат - можно ли сложить первый элемент со втором, первый с третьим ... и так далее.
Что-то типа
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
template <typename T1, typename T2, typename = std::void_t<>> struct _IsSummable: std::false_type {}; 
template <typename T1, typename T2> struct _IsSummable<T1, T2, std::void_t<decltype(T1() + T2())>>: std::true_type {}; 
 
template <typename...> struct IsSummable;
 
template <typename T1>
struct IsSummable<T1>
{
    static const bool value = _IsSummable<T1, T1>::value;
};
 
template <typename T1, typename T2, typename... TT>
struct IsSummable<T1, T2, TT...>
{
    static const bool value = _IsSummable<T1, T2>::value && IsSummable<T2, TT...>::value;
};
 
template <typename... TT> struct IsSummable<std::tuple<TT...>>: IsSummable<TT...> {}; 
 
static_assert(IsSummable<int, double, char>::value);
static_assert(IsSummable<std::tuple<int, double, char>>::value);
static_assert(!IsSummable<int, std::string>::value);
static_assert(!IsSummable<std::tuple<int, std::string>>::value);
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
07.12.2019, 13:35
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
_IsSummable
UB.


17.6.4.3.2 Global names
Certain sets of names and function signatures are always reserved to the implementation:
— Each name that contains a double underscore __ or begins with an underscore followed by an uppercase
letter (2.12) is reserved to the implementation for any use.
— Each name that begins with an underscore is reserved to the implementation for use as a name in the
global namespace.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.12.2019, 13:45
Цитата Сообщение от hoggy Посмотреть сообщение
UB.
UB??? И каким же образом имя класса, да ещё шаблонного, может вызвать неопределённое поведение в рантайме?
Ну, и оно как-то неплохо попадает под второй пункт этих рекомендаций, не говоря о том, что никакой речи про UB там не идёт. Просто какие-то соглашения по именам.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
07.12.2019, 18:42
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
UB??? И каким же образом имя класса, да ещё шаблонного, может вызвать неопределённое поведение в рантайме?
почитай что такое UB.

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

Цитата Сообщение от oleg-m1973 Посмотреть сообщение
оно как-то неплохо попадает под второй пункт этих рекомендаций
стандарт не делает никаких рекомендаций.

в данном случае он ясно даёт понять,
что подчеркивание и верхний регистр зарезерварованны для нужд языка.
и не должно использоваться ни в каких других случаях.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.12.2019, 18:50
Цитата Сообщение от hoggy Посмотреть сообщение
в данном случае он ясно даёт понять,
что подчеркивание и верхний регистр зарезерварованны для нужд языка.
и не должно использоваться ни в каких других случаях.
Да ладно, какие-такие нужды языка? Стандартная библиотека - это нужда языка или просто одна из многих библиотек, которые я могу подключать или не подключать?
Где в языке используются имена, начинающиеся с подчёркивания? Ни одного не вижу https://en.cppreference.com/w/cpp/keyword
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
07.12.2019, 19:00
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Да ладно, какие-такие нужды языка?
ты читать что ли не умеешь?
Цитата Сообщение от hoggy Посмотреть сообщение
is reserved to the implementation for any use.
или просто не понял смысла написанного?

Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Стандартная библиотека - это нужда языка или просто одна из многих библиотек, которые я могу подключать или не подключать?
стандартная библиотека - часть языка.

что именно ты будешь с нею делать никого не волнует.
что за вопрос такой странный?

Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Где в языке используются имена, начинающиеся с подчёркивания?
да где угодно.
открой реализацию стандартной библиотеки.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.12.2019, 19:00
Помогаю со студенческими работами здесь

Движок CMS , который можно настроить шаблон!
ПОДСКАЖИТЕ Движок CMS , который можно настроить шаблон! Чтобы можно было полностью изменить внешний вид! Буду очень благодарен! Уже целый...

Сложить все элементы массива
Всем привет, как сложить все элементы массива? искал на просторах интернета, но всё очень сложно и не понятно, если вам не сложно то...

Сложить все элементы в массиве
народ, кому не сложно, нужен код на vbs который заполнит массив случайными значениями, сложит все элементы и выведет сумму

Сложить все элементы последовательности
Вот собствено условие. Даны целые числа N (&gt; 2), A и B. Сформировать и вывести целочисленный массив размера N, первый элемент которого...

Сложить все элементы массива
function assa() { var a = new Array(4,2,3,6,10); var i; var sun; for(i=0;i &lt; a.length;i++) { sun = a + a; sun = sun + a; ...


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

Или воспользуйтесь поиском по форуму:
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