![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
блин не знал как тему назвать, вот и назвал так
мне нужно сделать следующее: считать из файла тип допустим int, без разницы как , в результате у меня будет известность о считанном типа, и его имя через typeid. вопрос как нибудь вообще можно, сделать следующее s<name> s;, где name имя типа.. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Чтобы считать объект из файла, нужно сначала знать его тип. Стандартный подход - записывать перед значением <нечто>, идентифицирующее тип. Соответственно, сначала считывать это нечто, создавать (динамически) объект нужного типа, затем уже читать. Поскольку сделать new <не знаю что> никак не удастся, различные фабрики рулят: В данном случае фабрика - это объект, который умеет создавать объект нужного типа по переданному <нечто>.
Самый простой подход: <нечто> = type_info::raw_name, фабрика внутри себя имеет raw_name -> функция создания объекта. Но, это, естественно тольеко для пользовательских типов. Для встроенных - слишком жирно будет. Но принцип тот же. -------------------- ... |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
Earnest, спасибо, суть вроде уловил.
|
|||
|
||||
| Rockie |
|
||||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
vinter, тип в конечном итоге все равно знаешь только ты. Можно сделать проверку к примеру таким образом:
То есть осуществлять форматный ввод в одну переменную, потом в другую. Но если для содержимое файла text.txt:
ты получишь ответ
то для содержимое файла text.txt:
будет
Почему? Потомучто 12 может быть и int, и double, и short -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
||||||||||
|
|||||||||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
Rockie, это то понятно, я не мог прикрутить, это к созданию шаблона с нужным мне типом, просто если так использовать if, то за пределами его я теряю свой обьект..
это худо бедно решается применением typeid(12).name() - получишь "int" |
|||
|
||||
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
vinter, это уже от обратного, тут 12 ты уже как-то получил. Но даже пусть так, а если 12 - это значение переменной типа double? А если long double? Компилятор не знает тип, пока ты ему не скажешь, int это просто default. Динамическое формирование объектов Эмуляция динамического объектно-ориентированного языка на С++ -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |