| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > динамический тип |
| Автор: vinter 28.2.2007, 19:19 |
| блин не знал как тему назвать, вот и назвал так мне нужно сделать следующее: считать из файла тип допустим int, без разницы как , в результате у меня будет известность о считанном типа, и его имя через typeid. вопрос как нибудь вообще можно, сделать следующее s<name> s;, где name имя типа.. |
| Автор: Earnest 28.2.2007, 19:46 |
| Чтобы считать объект из файла, нужно сначала знать его тип. Стандартный подход - записывать перед значением <нечто>, идентифицирующее тип. Соответственно, сначала считывать это нечто, создавать (динамически) объект нужного типа, затем уже читать. Поскольку сделать new <не знаю что> никак не удастся, различные фабрики рулят: В данном случае фабрика - это объект, который умеет создавать объект нужного типа по переданному <нечто>. Самый простой подход: <нечто> = type_info::raw_name, фабрика внутри себя имеет raw_name -> функция создания объекта. Но, это, естественно тольеко для пользовательских типов. Для встроенных - слишком жирно будет. Но принцип тот же. |
| Автор: vinter 28.2.2007, 20:08 |
| Earnest, спасибо, суть вроде уловил. |
| Автор: Rockie 1.3.2007, 12:59 | ||||||||||
vinter, тип в конечном итоге все равно знаешь только ты. Можно сделать проверку к примеру таким образом:
То есть осуществлять форматный ввод в одну переменную, потом в другую. Но если для содержимое файла text.txt:
ты получишь ответ
то для содержимое файла text.txt:
будет
Почему? Потомучто 12 может быть и int, и double, и short |
| Автор: vinter 1.3.2007, 13:28 | ||
Rockie, это то понятно, я не мог прикрутить, это к созданию шаблона с нужным мне типом, просто если так использовать if, то за пределами его я теряю свой обьект..
это худо бедно решается применением typeid(12).name() - получишь "int" |