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

Необходимо хранить список типов, и пользоваться ими, например, вызывать конструкторы

21.08.2014, 15:33. Показов 1590. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Мне необходимо хранить список типов, и пользоваться ими, например, вызывать конструкторы. Я нашел вариант решения проблемы в известной книге А. Александреску, но книга писалась давно, и вопрос: есть ли какие-либо варианты сделать тоже самое с помощью средств c++11, скажем, вариадических шаблонов (я не могу запихнуть в них то, что мне нужно, но они могут оказаться полезны по-другому)? Произошли ли какие-либо подвижки в этой области?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.08.2014, 15:33
Ответы с готовыми решениями:

Необходимо отсортировать список участников олимпиады по количеству набранных ими баллов
Во время проведения олимпиады каждый из участников получил свой идентификационный номер – натуральное число. Необходимо отсортировать...

Ресурсы проекта. Как ими пользоваться?
Я создал файл 1.html, записал его в папку проекта, создал файл 1.rc и записал туда имя_ресурса тип_ресурса имя_файла: MYHTML HTMLFILE...

Где хранятся настройки и как ими пользоваться?
В Visual Studio есть такая примочка - встроенные настройки приложения. Пытаюсь разобраться как ее использовать для начала мне очень...

6
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
21.08.2014, 16:08
Цитата Сообщение от relationer Посмотреть сообщение
есть ли какие-либо варианты сделать тоже самое с помощью средств c++11, скажем, вариадических шаблонов (я не могу запихнуть в них то, что мне нужно, но они могут оказаться полезны по-другому)?
Есть. Можно.
Почему ты не можешь в них запихнуть то, что тебе нужно?

Добавлено через 6 минут
Кстати еще можно воспользоваться boost::mpl.
0
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
21.08.2014, 16:36  [ТС]
Мне необходима длина, перечисление, проч. от этого списка типов.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
21.08.2014, 17:20
relationer, std::tuple?
1
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
21.08.2014, 18:48  [ТС]
Он хранит не список типов, а список значений по заданному списку типов. Можно, конечно, использовать decltype, но все это дает ряд ограничений (например, либо используй указатели, либо трать память на хранение единицы объекта, если сможешь её сконструировать).
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
21.08.2014, 19:17
Лучший ответ Сообщение было отмечено relationer как решение

Решение

Цитата Сообщение от relationer Посмотреть сообщение
Он хранит не список типов, а список значений по заданному списку типов.
Вас же не заставляют создавать объект тупла:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
#include <tuple>
 
int main() {
  typedef std::tuple<int, std::string> IntString;
  
  std::cout << "Tuple size: "
    << std::tuple_size<IntString>::value << std::endl;
  
  std::tuple_element<1, IntString>::type string_object = "Hello";
  
  std::cout << ">> " << string_object << std::endl;
}
1
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
21.08.2014, 20:50
Лучший ответ Сообщение было отмечено relationer как решение

Решение

Цитата Сообщение от relationer Посмотреть сообщение
Мне необходима длина, перечисление, проч. от этого списка типов.
Это все можно обеспечить через variadic templates.
Вообще, в С++11 нет надобности реализовывать список типов как-то отдельно (например через кортежи, как у Александреску, хотя с С++11 и это сделать гораздо проще теперь). Достаточно написать:
C++
1
2
template <typename ...Types>
struct type_list;
Это и будет простейшим списком типов. Теперь к нему можно написать функцию получения по индексу, поиска и длины. Если нужно, могу показать как.

Добавлено через 20 минут
relationer,
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
// Список типов
template <typename ...Types>
struct type_list;
 
// Элемент по индексу
template <typename T, size_t I>
struct type_at;
 
template <typename T, typename... Args, size_t I>
struct type_at<type_list<T, Args...>, I>
{
    typedef typename type_at<type_list<Args...>, I - 1>::type type;
};
template <typename T, typename... Args>
struct type_at<type_list<T, Args...>, 0>
{
    typedef T type;
};
// Длина
template <typename T>
struct type_list_length;
 
template <typename... Args>
struct type_list_length<type_list<Args...>>
{
    enum { value = sizeof...(Args) };
};
 
int main()
{
    typedef type_list<int, char, bool> list3;
 
    std::cout << std::boolalpha
              << "Second element is int:  " << std::is_same<int, type_at<list3, 1>::type>::value  << '\n'
              << "Second element is char: " << std::is_same<char, type_at<list3, 1>::type>::value << '\n';
 
    std::cout << "List length: " << type_list_length<list3>::value << std::endl;
}
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.08.2014, 20:50
Помогаю со студенческими работами здесь

Отладчики - какая от них польза и как ими правильно пользоваться?
Какую пользу несут отладчики и как ими правильно пользоваться? Нет, как его запустить я себе представляю (благо иде помогает), но что я...

Где лежат библиотеки четвёртой версии OpenOffice и как ими пользоваться?
Вообщем, где лежат библиотеки четвёртой версии OpenOffice, как их подключить и как с ними работать

Возможно ли на C# вызывать функции из C, например fopen
Здравствуйте Вопрос, возможно, глупый, но все равно: возможно ли на C# вызывать функции из C, например fopen(...);, и как это делается. ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Камера 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. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru