![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Тигер |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 4.4.2010 Репутация: нет Всего: нет |
Как на С++ огранизовать удобный оффлайн конфиг. тобишь ini и пр. рантайм не предлогать =)
хочется что-то вроде cnfMap["file_name"]="My file"; cnfMap["count"]=5; cnfMap["zlo"]=0.0006; структуры и union не подходят. точнее не совсем подходят. нужен именно маппер с ключами, что бы можно было вывести конфиг в цикле как key => value |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
конечно же boost.property_tree.
|
|||
|
||||
Тигер |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 4.4.2010 Репутация: нет Всего: нет |
спасибо, это идеальное решение.
но у меня программа не большая, там поминимому библиотек, тоесть хотелось бы вариант максимум с STL, WinAPI |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
изврат конечно, но сам когда-то писал.
Это сообщение отредактировал(а) boostcoder - 23.10.2010, 17:03 |
|||
|
||||
Тигер |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 4.4.2010 Репутация: нет Всего: нет |
идея интересная, но что-то я не пойму почему у меня не работает
map<string,variant*> cnf; cnf["test"]=new variant("5"); int num=cnf["test"]->as<int>(); и даже так variant is("5"); int num=is.as<int>(); |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
что-то вы нагородили..
так:
|
|||
|
||||
Леопольд |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
сделай как-то так:
config.h
config.cpp
правда смысла от этого не вижу, лучше констант наплодить... Это сообщение отредактировал(а) Леопольд - 23.10.2010, 19:44 -------------------- вопросов больше чем ответов |
||||
|
|||||
Тигер |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 4.4.2010 Репутация: нет Всего: нет |
ну мне файл просто не нужен. тоесть мне каг бы нужeн оффлайн глобальный массив конфигурации
чтобы я сделал так
тобишь просто массив с "разными типами" структуры и объединения не подходят из-за неудобной иницаилизации в случае с контейнером map из-за невозможности вывести содержимое как key => value; в случае простой конфигурационной структуры без map =) Это сообщение отредактировал(а) Тигер - 23.10.2010, 19:39 |
|||
|
||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
-------------------- вопросов больше чем ответов |
|||
|
||||
Тигер |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 4.4.2010 Репутация: нет Всего: нет |
пусть так, главное что рантайм не подходит.
|
|||
|
||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
И то и другое рантайм.
Лучше вынести константы в отдельный namespace:
Это сообщение отредактировал(а) Леопольд - 23.10.2010, 19:53 -------------------- вопросов больше чем ответов |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
в извращениях не участвую
![]() |
|||
|
||||
Тигер |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 4.4.2010 Репутация: нет Всего: нет |
Леопольд
namespace нельзя вывести как key=>value в цикле =) boostcoder это называется удобный конфиг,а не извращение ;) |
|||
|
||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Это точно не конфиг, его нельзя изменить, а конфиг подразумевает настройку bез перекомпиляции.
Это сообщение отредактировал(а) Леопольд - 23.10.2010, 19:58 -------------------- вопросов больше чем ответов |
|||
|
||||
Тигер |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 4.4.2010 Репутация: нет Всего: нет |
можно - при компиляции
нет Это сообщение отредактировал(а) Тигер - 23.10.2010, 20:00 |
|||
|
||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
-------------------- вопросов больше чем ответов |
|||
|
||||
Тигер |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 4.4.2010 Репутация: нет Всего: нет |
это зависит от поставленной задачи. в рамках данной задачи это удобный кофиг =)
и да. variant s("5"); int i=s.as<int>(); error C2062: type 'int' unexpected что значит тип неожиданный.. Это сообщение отредактировал(а) Тигер - 23.10.2010, 20:11 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
значит в данном контексте он не ожидается.. возможно у вас функция as не шаблоная.. в общем не глядя на код трудно сказать.. |
|||
|
||||
Тигер |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 4.4.2010 Репутация: нет Всего: нет |
|
|||
|
||||
Тигер |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 4.4.2010 Репутация: нет Всего: нет |
как я понял есть такой паттерн - Variant или Any
нашёл несколько реализация, но мне нравится реализация которая тут выше, а она не работает. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
или то место где ошибка не показали , или компилятор у Вас староват :
http://liveworkspace.org/code/deae7dfc1c3e...ce4541a4b2421c1 |
|||
|
||||
Тигер |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 4.4.2010 Репутация: нет Всего: нет |
VC6 =)
у меня необходимость использовать имено VC6 к сожелению. что посовутуете? Добавлено через 5 минут и 16 секунд вот так ошибку не выдает но и не работает исключение вылетает при запуске программы
|
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
а так работает ? :
|
|||
|
||||
Тигер |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 4.4.2010 Репутация: нет Всего: нет |
вот так работает...
но это не вариант =) всмысле неудобно и в массив не загонишь никак Это сообщение отредактировал(а) Тигер - 23.10.2010, 21:03 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
Тигер |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 4.4.2010 Репутация: нет Всего: нет |
хз =)
статику в функции заюзать и хранить указатель на функцию? а как различать присвоение от вывода? меня вот такой вариант устраивает =) http://liveworkspace.org/code/96e9c7184033...e0d119a670e125f только не понятно почему не работает такой http://liveworkspace.org/code/fd2324d1a3fb...40cf61e2d6d2796 Это сообщение отредактировал(а) Тигер - 23.10.2010, 21:19 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
потому что cnf["key1"] = .. вне функции |
|||
|
||||
Тигер |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 4.4.2010 Репутация: нет Всего: нет |
мм. а разве нельзя в глобальной области так делать? тоесть мне впринципе нужен глобальный контейнер
|
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
если нельзя определять шаблоные функции внутри класса, то придется сделать шаблонную функцию внешней, а в классе прокси функции для удобного пользования.. т.е.
а если применить в дополнение паттерн pimpl, точнее его разновидность _виртуальный конструктор_ то, можно избавиться и от лишних new, т.е. будет просто: variant v1 (5), v2 ("string"); Добавлено через 3 минуты и 11 секунд
определить и инициализировать можно, а присвоение уже должно быть внутри функции, которую к примеру можно вызвать первую в main.. или написать класс в конструкторе которого идет нужная инициализация и создать его объект пред маин.. но лучше смотреть тогда паттерн singleton.. |
||||
|
|||||
Тигер |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 4.4.2010 Репутация: нет Всего: нет |
плюнул и сделал так...
мм а зачем тут singleton? нам же впринципе без разницы сколько экземпляров мы будем создавать, только память правда расходуется... Это сообщение отредактировал(а) Тигер - 23.10.2010, 21:54 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
Тигер |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 4.4.2010 Репутация: нет Всего: нет |
ОБлом. В массив то теперь не загонишь...
ну если бы инициализация в конструкторе была статичная, то по сути так бы оно и было =) если я конечно правильно понял что вы предложили... Это сообщение отредактировал(а) Тигер - 23.10.2010, 22:02 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
Тигер |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 4.4.2010 Репутация: нет Всего: нет |
ну вот такая штука теперь не будет рабоать =)
|
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
ну так естественно.. у Вас кол-во же вариантов типа вариант ограничено ? что ж мешает избавиться от шаблона ? |
|||
|
||||
Тигер |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 4.4.2010 Репутация: нет Всего: нет |
хочется похорошему сделать...
наверно надо забить и скачать студию всё таки.. |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
лжец! это называется хардкодинг. лжец! и это называется хардкодинг. лжец! все работает. а почему бы не взять мой класс, и переделать его так, чтоб он использовал std::istringstream вместо файла? ![]() Добавлено через 1 минуту и 21 секунду может стОило сказать спасибо? |
|||
|
||||
Тигер |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 4.4.2010 Репутация: нет Всего: нет |
я сказал да =)
но в добавок это называется удобный конфиг и рациональная реализация. я и взял по сути ваш класс =) в VC6 не работает. и спасибо за паттерн. |
|||
|
||||
artikov |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 20.2.2010 Репутация: нет Всего: нет |
||||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
Аналогично, все не читал. Сам использую конфиги на макросах и в зависимости от настроек сборки проекта подключаю его статически в компайл-тайм или распарсиваю в рантайме.
Для очень сложных конфигов - XML, рантайм разумеется. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |