Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2012, 10:16   #1
RomanA
Пользователь
 
Регистрация: 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:

Код:
if(type == 1) std::vector< int > collection;
else if(type == 2) std::vector< float > collection;...
то collection видна только в пределах блока if. Аналогично со switch.

Была идея использовать указатели на vector и reinterpret_cast, но как и ожидалось сие не работает:

Код:
std::vector< int > *collection = new std::vector< int >(10);
collection->push_back(3);
std::vector< double > *B;
B = reinterpret_cast< std::vector< double>* >(collection);
Вообще, как будет правильно поступать в таких ситуациях? Возможно ли такое в принципе (динамически, по ходу работы программы создавать (или менять) тип вектора)? Прошу совета, мне идей пока не хватает...
RomanA вне форума Ответить с цитированием
Старый 24.04.2012, 10:21   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

С++ это ЯП со строгой и статической типизацией.
но есть union/boost::variant например.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.04.2012, 15:09   #3
SergeyCh
Пользователь
 
Регистрация: 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.
SergeyCh вне форума Ответить с цитированием
Старый 25.04.2012, 05:28   #4
RomanA
Пользователь
 
Регистрация: 10.08.2011
Сообщений: 30
По умолчанию

Спасибо большое за советы и ссылки! Буду копать в нужном направлении!

Последний раз редактировалось RomanA; 25.04.2012 в 05:34.
RomanA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка во время работы программы 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