Здравствуйте, гость ( Вход | Регистрация )
BRE | Дата 11.8.2009, 18:14 |
Об этом подумал. Какой класс буста использовать? ![]() Мне понравилось одно решение с фабриками (подсмотрел на Inside C++). Я его немного переделал, что бы в качестве ключа можно было использовать не только строки. Раскрывающийся текст
Как это использовать: Раскрывающийся текст
|
|
AD | Дата 11.8.2009, 12:22 |
Поэтому я тебе и написал, что не могу понять для чего ты все это делаешь. Теперь понял. ![]() IMHO any не очень подходит для таких задач. Можно попробовать получать имя типа из type_info, но все равно придется городить свой if для каждого типа. При добовлении нового типа, нужно будет дописывать свою ветвь. Может лучше воспользоваться фабриками. Для каждого типа карты делается специальный класс loader, который умеет ее загружать. Все они регистрируются в фабрике и она создает объект-загрузчик в зависимости от указанного типа. Об этом подумал. Какой класс буста использовать? ![]() |
|
BRE | Дата 11.8.2009, 12:17 |
Примерно так: Спасибо. А вопрос такой, а можно ли это сделать так, чтобы при добавлении, например, еще какого-то типа данных, ну например топографии другого формата, не надо было бы еще одну ветку else делать? Т.е. смысл-то этого вектора с any, чтобы он автоматом определял тип, а не при непосредственном приведении. Поэтому я тебе и написал, что не могу понять для чего ты все это делаешь. Теперь понял. ![]() IMHO any не очень подходит для таких задач. Можно попробовать получать имя типа из type_info, но все равно придется городить свой if для каждого типа. При добовлении нового типа, нужно будет дописывать свою ветвь. Может лучше воспользоваться фабриками. Для каждого типа карты делается специальный класс loader, который умеет ее загружать. Все они регистрируются в фабрике и она создает объект-загрузчик в зависимости от указанного типа. |
|
AD | Дата 11.8.2009, 8:26 |
Примерно так: Спасибо. А вопрос такой, а можно ли это сделать так, чтобы при добавлении, например, еще какого-то типа данных, ну например топографии другого формата, не надо было бы еще одну ветку else делать? Т.е. смысл-то этого вектора с any, чтобы он автоматом определял тип, а не при непосредственном приведении. |
|
BRE | Дата 10.8.2009, 8:20 |
А как именно поправить я не понял? Прости, если донимаю... Примерно так:
|
|
AD | Дата 10.8.2009, 8:12 |
Цитата sizeof( any ) == 4, т.е. он хранит указатель на внутренний объект (content)! Читая file.read((char*)&_types[key], sizeof(_types[key])) ты этот указатель затираешь первыми четырьмя байтами из файла. При разрушении any программа падает. Все логично. ![]() Обрати внимание на any_cast<Type>(...)!!! А как именно поправить я не понял? Прости, если донимаю... |
|
BRE | Дата 10.8.2009, 7:59 |
sizeof( any ) == 4, т.е. он хранит указатель на внутренний объект (content)! Читая file.read((char*)&_types[key], sizeof(_types[key])) ты этот указатель затираешь первыми четырьмя байтами из файла. При разрушении any программа падает. Все логично. ![]() Обрати внимание на any_cast<Type>(...)!!! |
|
AD | Дата 9.8.2009, 21:12 |
Почему-то вылетает с ошибкой при работе со следующим кодом:
Правда, структуры не имеют конструкторов, но это код библиотеки:
Отладчик выпадает на следующие строки:
Как можно исправить ошибку? |
|
Просмотр темы полностью (откроется в новом окне) | |
![]() |
Текстовая версия | Сейчас: 12.2.2025, 18:15 |