В статье «String enum — строковые enum» я писал о том как связывать текстовые представления с enum class — метод хороший но только если все элементы заранее известны, но зачастую бывает что строки являются некими идентификаторами и конечно же заранее не известны, а зачастую будут добавляться позднее и причем без пересборки программы.
Требования к библиотеке все теже:
Кроссплатформенность;Минимум зависимостей;Скорость чтения;Простой синтаксис;
Пример конфига
{ "objects": [ { "id": "object1", "events": { "event1":{ "give": {"object2": 4} }, } }, { "id": "object2", "events": { "event2":{ "give": {"object1": 3} }, }, { "id": "object3", "events": { "event3":{ "give": {"object3": 4} }, } },
Первая и самая простая идея которая напрашивается это:
std::map<std::string,script> events;
Но опять же если это высоконагруженная часть программы то поиск по map может быть достаточно долгим, хэши могут дать колизии чего совсем не хочется.
Вторая идея парсить этот конфиг в 2 прохода тогда на 2-м проходе object1, object2, object3 будут уже известны и можно будет записать на них прямо указатели или ссылки. Но если зависимости еще более сложные то такой подход может и не сработать.
Я предлагаю способ позволяющий существенно сократить runtime издержки подобных конструкций
Читать дальше → http://habrahabr.ru/post/236697/
Присоединяйтесь — мы покажем вам много интересного
Присоединяйтесь к ОК, чтобы подписаться на группу и комментировать публикации.
Нет комментариев