0 / 0 / 0
Регистрация: 26.07.2017
Сообщений: 59
|
|||||||||||
1 | |||||||||||
Шаблоны с переменным списком типов30.06.2019, 14:32. Показов 4022. Ответов 12
Здравствуйте, Коллеги.
Вопрос в следующем. Мы можем создать шаблонный класс вида:
Предположим, что необходимо создать такой же класс но с переменным числом типов:
Было бы удобно иметь какой либо массив, вектор или еще что либо. Прошу подскажите, кто понимает.
0
|
30.06.2019, 14:32 | |
Ответы с готовыми решениями:
12
Шаблоны с переменным числом аргументов Функция с переменным числом аргументов (через шаблоны) обращение к переменным разных типов через указатель Заявки разных типов с переменным размером в знаках |
1536 / 456 / 101
Регистрация: 17.05.2015
Сообщений: 1,424
|
||||||
30.06.2019, 15:39 | 2 | |||||
Сообщение было отмечено Azmoday как решение
Решение
http://www.cplusplus.com/reference/tuple/tuple/
https://habr.com/ru/post/318236/ https://rextester.com/INWHWK37955
1
|
0 / 0 / 0
Регистрация: 26.07.2017
Сообщений: 59
|
|||||||||||
30.06.2019, 22:27 [ТС] | 3 | ||||||||||
eva2326, Огромное спасибо!!!
Добавлено через 23 минуты Блин, к сожалению это не все ((( Попробовал усовершенствовать, так что бы контролировать доступ данным:
error C2975: _Idx: недопустимый аргумент шаблона для "std::get", требуется константное выражение времени компиляции Есть способ исправить? Добавлено через 41 минуту eva2326, вы не в курсе как с этим справиться? Добавлено через 4 часа 51 минуту Пока не получается приспособить перегрузку operator[], но получилось сделать другой функцией:
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
30.06.2019, 22:42 | 4 | |||||
это возможно, но:
1. реализация не тривиальная 2. любая возможная реализация будет значительно менее эффективна, по сравнению с статическим решением вида:
лучше не заморачивайся.
0
|
0 / 0 / 0
Регистрация: 26.07.2017
Сообщений: 59
|
|
30.06.2019, 23:05 [ТС] | 5 |
Эффективность сейчас не критична, важно понять как.
0
|
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
|
|
30.06.2019, 23:29 | 6 |
Azmoday, а обрабатывать переменную произвольного типа как собираешься? Тип auto - он времени компиляции, его невозможно использовать для типизации времени исполнения. Точно так же как сами шаблоны нельзя использовать для типизации времени исполнения.
Только switch() для всех-всех типов в каждой функции обработки данного типа. Добавлено через 8 минут А значит простейшим способом для этого будет использование union (которое собственно именно для вмещения нескольких типов в одном поле и предназначено) + переменную для хранения номера используемого типа. Добавлено через 4 минуты Ну или вместо switch() использовать if else if else как тут - Реализовать класс var - «Универсальная переменная»
0
|
1536 / 456 / 101
Регистрация: 17.05.2015
Сообщений: 1,424
|
|
01.07.2019, 00:19 | 8 |
0
|
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
|
||||||
01.07.2019, 20:11 | 10 | |||||
Azmoday, если бы речь шла о просто вводе переменной времени компиляции то можно было бы помудрить что-то с constexpr, но в данном случае у нас может быть только шаблон, ибо тип данных к нему привязан. Сделать operator[] шаблонным конечно же нельзя.
Единственный другой вариант это
0
|
18825 / 9828 / 2402
Регистрация: 30.01.2014
Сообщений: 17,263
|
|||||||||||
01.07.2019, 20:32 | 11 | ||||||||||
Сообщение было отмечено Azmoday как решение
Решение
Azmoday, можно попробовать как-то так:
1
|
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
|
||||||
02.07.2019, 08:09 | 12 | |||||
Сообщение было отмечено Azmoday как решение
Решение
Есть
std::placeholders , только начинаются с _1 .
3
|
0 / 0 / 0
Регистрация: 26.07.2017
Сообщений: 59
|
|
02.07.2019, 09:47 [ТС] | 13 |
0
|
02.07.2019, 09:47 | |
02.07.2019, 09:47 | |
Помогаю со студенческими работами здесь
13
Функция с переменным числом параметров. Преобразование типов шаблоны, обобщения, приведение типов Шаблоны функции для типов char Шаблоны, рекурсия, определение типов std::function Шаблоны и определение SSE типов на этапе компиляции Создать перегружаемые функции и шаблоны для типов int и double Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |