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

tuple and pack parameters

22.05.2020, 09:21. Показов 533. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, подскажите, пожалуйста, как реализовать примерный код:


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
template <typename... Args>
class A
{
public:
    A(Args... args) {ind = std::make_tuple(args...);}
    std::tuple<Args...> ind;
};
 
void foo()
{
    std::cout << std::endl;
}
 
template <typename First, typename... Rest>
void foo(First _first, Rest... _rest)
{
    std::cout << _first;
    foo(_rest...);
}
 
 
int main()
{
    A a1(1, 2);
    A a2(1, 2, 3);
    A a3(1, 2, 3, 4);
 
    foo(a1.ind);
    foo(a2.ind);
    foo(a3.ind);
}
Добавлено через 41 минуту
класс А, не обязательно должен хранить индекс в tuple, главное передать этот индекс в функцию.
Экземпляров класса А может быть много
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.05.2020, 09:21
Ответы с готовыми решениями:

Использование #pragma pack(push,1)... pack(pop)
Добрый день, товарищи. Задался вопросом о записи в файл структур данных, читал читал в интернете много интересного. Наткнулся на...

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

Русские символы NT 4.0+Service pack 6 + Option pack + MS SQL7.0 с СР1251
Помогите пожалуйста!!!!!! имею NT 4.0+Service pack 6 + Option pack + MS SQL7.0 с СР1251 Выполняю код с подключением к базе через ODBC...

5
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
22.05.2020, 09:28
sema_90,

С++17
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 <tuple>
#include <iostream>
 
template <typename... Args>
class A
{
public:
    A(Args... args) {ind = std::make_tuple(args...);}
    std::tuple<Args...> ind;
};
 
void foo()
{
    std::cout << std::endl;
}
 
template <typename First, typename... Rest>
void foo(First _first, Rest... _rest)
{
    std::cout << _first;
    foo(_rest...);
}
 
 
int main()
{
    A a1(1, 2);
    A a2(1, 2, 3);
    A a3(1, 2, 3, 4);
 
    std::apply([](auto ...x){ foo(x...); }, a1.ind);
    std::apply([](auto ...x){ foo(x...); }, a2.ind);
    std::apply([](auto ...x){ foo(x...); }, a3.ind);
}
0
0 / 0 / 0
Регистрация: 28.01.2012
Сообщений: 46
22.05.2020, 09:50  [ТС]
а если я ограничен С++11?
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
22.05.2020, 09:53
Цитата Сообщение от sema_90 Посмотреть сообщение
а если я ограничен С++11?
Ну тогда вам нужно повторить реализацию std::apply вручную.
0
0 / 0 / 0
Регистрация: 28.01.2012
Сообщений: 46
22.05.2020, 13:04  [ТС]
Ну тогда вам нужно повторить реализацию std::apply вручную.
А если использоваться не tuple? нет способа попроще?

Добавлено через 21 минуту
Ну тогда вам нужно повторить реализацию std::apply вручную.
Попробовал понять как это сделать, не получилось(

Добавлено через 2 часа 6 минут

на другом форуме помогли:

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
template <typename... Args>
class A
{
public:
    A(Args... args) {ind = std::make_tuple(args...);}
    std::tuple<Args...> ind;
};
 
void foo()
{
    std::cout << std::endl;
}
 
template <typename First, typename... Rest>
void foo(First _first, Rest... _rest)
{
    std::cout << _first;
    foo(_rest...);
}
 
template< size_t ... Ints >
class integer_sequence{};
 
 
template < typename T, size_t N >
struct add_sequence;
 
template < size_t N, size_t ... IDX >
struct add_sequence< integer_sequence<IDX...>, N>
{
    using type = integer_sequence< IDX..., N>;
};
 
template < size_t N >
struct sequence_helper
{
    using type = typename add_sequence< typename sequence_helper<N-1>::type, N-1>::type;
};
 
template<>
struct sequence_helper<0>
{
    using type = integer_sequence<>;
};
 
template<size_t N>
using make_integer_sequence = typename sequence_helper<N>::type;
 
template < typename IS, typename TUPPLE >
struct call;
 
template < size_t ... IDX, typename ... PARMS >
struct call< integer_sequence< IDX...>, std::tuple< PARMS...>>
{
    static void go( std::tuple< PARMS...> parms )
    {
        foo( std::get< IDX >( parms ) ... );
    }
};
 
template < typename ... PARMS >
void foo2( std::tuple< PARMS...>& tup )
{
    call<make_integer_sequence< sizeof...(PARMS)>, std::tuple< PARMS...>>::go( tup );
}
 
 
int main()
{
    A<int, int> a1(1, 2);
    A<int, int, int> a2(1, 2, 3);
    A<int, int, int, int> a3(1, 2, 3, 4);
 
    foo2(a1.ind);
    foo2(a2.ind);
    foo2(a3.ind);
}
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
22.05.2020, 13:08
Как-то так можно:
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <tuple>
#include <iostream>
 
template <typename... Args>
class A
{
public:
    A(Args... args) {ind = std::make_tuple(args...);}
    std::tuple<Args...> ind;
};
 
 
template<typename T>
void output(T const & v)
{
    std::cout << v;
}
 
template<typename ... Args, size_t ... Indexes>
void output_tuple(std::tuple<Args...> const & t, std::index_sequence<Indexes...>)
{
    int fake[] = 
    {
        (output(std::get<Indexes>(t)), 0)...
    };
    (void)fake;//make happy
}
 
template<typename ... Args>
void output(std::tuple<Args...> const & v)
{
    output_tuple(v, std::make_index_sequence<sizeof...(Args)>());
}
 
void foo()
{
    std::cout << '\n';
}
 
template <typename First, typename... Rest>
void foo(First _first, Rest... _rest)
{
    output(_first);
    foo(_rest...);
}
 
 
 
int main()
{
    A a1(1, 2);
    A a2(1, 2, 3);
    A a3(1, 2, 3, 4);
 
    foo(a1.ind);
    foo(a2.ind);
    foo(a3.ind);
}
Но apply - это более общее решение.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.05.2020, 13:08
Помогаю со студенческими работами здесь

Pack() [function.pack]: Type H: illegal hex digit m in
Возникла довольно странная проблема, при загрузке страницы вылезает Warning: pack() : Type H: illegal hex digit m in, в чем может быть...

tuple foreach
Взял за основу вот это ...

Tuple (кортежи)
Подскажите пожалуйста реальный пример применения кортежей? Я что-то не могу понять для чего может понадобиться....

Перевернуть tuple
На одной строке вам даны числа. Сохраните данные числа в tuple. Затем, разделив tuple на два, переставьте местами первую и вторую половину...

Немного о tuple
Короче мозг не варит, играюсь с функциями, суть: Есть функция sum, принимающая аргумент *numbers, при получении любого кол-ва чисел...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru