|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
24.04.2012, 10:16 | #1 |
Пользователь
Регистрация: 10.08.2011
Сообщений: 30
|
Можно ли динамически (во время работы программы) задавать тип, который содержится в контейнере (например в vector)?
Требуется написать программу, которая предоставлят следующие возможности:
1)Выводит меню с запросом о типе данных, который будет помещен в vector. Например в консоли: "Please, input the type of data: 1 - int 2 - float other - double" 2)После ввода типа данных в зависимости от введенного числа формировался бы vector: std::vector< int > collection; или std::vector< float > collection; или std::vector< double > collection; Проблема заключается в том, что непонятно где и как объявлять переменную collection. Если вставить объявление collection в оператор if: Код:
Была идея использовать указатели на vector и reinterpret_cast, но как и ожидалось сие не работает: Код:
|
24.04.2012, 10:21 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
С++ это ЯП со строгой и статической типизацией.
но есть union/boost::variant например. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
24.04.2012, 15:09 | #3 |
Пользователь
Регистрация: 22.04.2012
Сообщений: 27
|
Динамическая типизация и С++
Как ответил "Пепел Феникса", C++ это язык со статической типизацией. И теоретически это сделать в С++ нельзя. Но "если хочется то ..." -
1. Используя Boost.Variant. Здесь покажут как: Is it possible to choose a C++ generic type parameter at runtime? (по-английски). 2. Перейти на C++/CLI и тогда, использовать "reflection" и "custom binding" (разновидность "late binding", "привязка типа во время выполнения") - Custom Binding (MSDN) 3. Динамическая типизация используя DLL - MSDN, Using Run-Time Dynamic Linking (на английском) - это уже слишком сложно для небольших задач, но знать не помешает. 4. Сделать правильно в C++ - использовать "специализацию шаблонов" (template specialization) - "Например, вы можете использовать шаблоны функций для создания набора функций, которые применяют тот же алгоритм для различных типов данных." (MSDN, Templates) Последний раз редактировалось SergeyCh; 24.04.2012 в 20:33. |
25.04.2012, 05:28 | #4 |
Пользователь
Регистрация: 10.08.2011
Сообщений: 30
|
Спасибо большое за советы и ссылки! Буду копать в нужном направлении!
Последний раз редактировалось RomanA; 25.04.2012 в 05:34. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
ошибка во время работы программы | geologg | Общие вопросы C/C++ | 4 | 20.04.2012 22:07 |
Время Работы Программы | shilovec5377 | Общие вопросы Delphi | 1 | 17.04.2012 17:15 |
Можно ли вытащить уже скачанные фотки из программы Google Earth и перевести их в другой формат, например jpeg? | myshonoc | Софт | 0 | 11.03.2012 01:04 |
можно ли в Excel задавать тип данных ячейки через формулу? | peq | Microsoft Office Excel | 3 | 29.03.2010 15:30 |
Время работы программы | Magist | Компоненты Delphi | 5 | 24.10.2009 20:52 |