![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
всем доброго дня.
нужно понять, какой должна быть декларация/реализация функции, позволяющая использовать ее так:
т.е. кол-во аргументов должно быть variadic. в данном случае аргументов два. тип аргумента({"tag", value}) - допустим std::pair<std::string, T>, где Т - шаблонный параметр. я так полагаю, что тут нужно использовать initializer_list. все. дальше мысли не идут. спасибо. Up. по моему, как-то криво объяснил... в общем, сейчас делаю так:
prop_name - всегда строка. prop_value - значения произвольных типов. т.е. сначала заполняю список свойств, потом передаю его как запрос. сам принцип заполнения сильно раздражает. нет смысла создавать временный объект и заполнять его руками. потому и хочу избавиться от json_props. вот Это сообщение отредактировал(а) boostcoder - 26.5.2011, 08:22 |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
если добавить еще пару фигурных скобок, то можно сделать с initializer_list. Добавлено через 2 минуты и 44 секунды как то так :
Добавлено через 4 минуты и 28 секунд от этого не уйти.. только в одном случае он будет явно в другом нет.. |
|||
|
||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
а как быть со вторым параметром инициализации? его тип может быть произвольным. как вариант, завести нужное кол-во функций типа:
вот только что-то я накосячил... и не пойму что не так.. http://liveworkspace.org/code/d4eb112c5c90...8a232223107a171 Добавлено через 1 минуту и 5 секунд это понятно. это и имел ввиду. |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
не понятно, Вам нужно получить в итоге кортеж или массив ? |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
массив pair`ов, где first - std::string, а second - произвольный тип. вот |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
хотя нет. можно чего-то типа:
это понятно. потому и ломаю голову.. |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
раз json, то достаточно строк
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ну так что должно будет потом получиться из произвольного типа ? что от него ожидается ? |
|||
|
||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
нет. раз json, то нужно сериализовать пользовательские типы и формировать json. но спасибо. Добавлено через 2 минуты и 12 секунд
ну вот, допустим, при помощи initializer_list, инициализировать аргументы в соответствии с:
а внутри func() сериализовать их и сформировать json-структуру. |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
можно разделить уровни - где кончаются пользовательские типы и начинается json если хочется типов, лучше явного добавления параметров в запрос не придумать если хочется простоты типа javascript/php, придется поступиться типами тут еще дело в том, что программа, формирующая json запрос понятия не имеет, какие _должны_ быть типы, так что все сводится к корректному преобразованию из пользовательского типа в строку Добавлено через 37 секунд Добавлено через 2 минуты и 42 секунды хорошей идеей мне кажется использования что-то типа boost::variant |
|||
|
||||
| boostcoder |
|
||||||||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
да, знаю. это я как пример привел. так получается, что это единственный способ.. ок. http://liveworkspace.org/code/7f4928a72ee9...f4c35768df4a0eb остался второй вопрос: variadic-templates тут не поможет: http://liveworkspace.org/code/67bc8166f42f...c39f37e81ad30e5 что, тупо написать 10 функций(у меня минимум 3 значения и максимум 13) для нужного кол-ва аргументов? Добавлено @ 11:09
именно от этого и хочу избавиться.
почему?
почему?
почему? зы ух сколько вопросов Добавлено @ 11:12
а вот этого не надо. мне нужна информация о типе. и как показано в первом посте - у меня работает. понимает что за тип. и формирует значение соответствующего типа(строка/double/массив) Это сообщение отредактировал(а) boostcoder - 26.5.2011, 11:19 |
||||||||||
|
|||||||||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
boostcoder, Вы не поняли.
прочитайте еще раз и подумайте |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
если массив - идем в рекурсию. и получается прям как это: http://en.wikipedia.org/wiki/Json#Data_typ...tax_and_example и никакого рукоблудства Добавлено через 1 минуту и 29 секунд то, что я не понял, я как раз и понял. потому столько вопросов задал. |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
вот смотрите:
prop_value2 может принимать значения типа из некоторого набора типов. со значением "prop_name2" этот тип не связан. так что если у вас variant из того самого набора, то ничего не меняется. если же Вы захотите связать имя свойства и тип (что имхо излишне), это совсем другая история и архитектура Добавлено через 3 минуты и 33 секунды именно поэтому вся задача сводится к преобразованию типов в строки (сериализация), но не к проверке типов Добавлено через 7 минут и 33 секунды вообще, чувствуется желание задать параметры JSON естественным образом, синтаксически наиболее близким к javascript это можно сделать, перегружая операции (примерно как делается грамматика в boost::spirit) |
|||
|
||||
| boostcoder |
|
||||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
baldina, не понимаю что Вы хотите сказать..
из таких операций:
получаю это:
как Вы предлагаете такого добиться, не имея информации о типе? Добавлено через 1 минуту и 32 секунды
та я не проверяю типы! информация о типе мне нужна для того, чтоб соответствующим образом сформировать json-запись для этого типа! Добавлено через 1 минуту и 52 секунды вопрос закрыт. всем спасибо. |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
у меня так и происходит. только в методе add_prop() но я хочу избавиться от ручного кода и явного временного объекта. поэтому перенес в конструктор: http://liveworkspace.org/code/7f4928a72ee9...f4c35768df4a0eb теперь осталось понять каким образом написать функцию принимающую 3-13 аргументов... наверное придется написать 10 функций. ничего иного в голову не приходит.. Добавлено через 9 минут и 19 секунд в общем получилось как и хотел
Это сообщение отредактировал(а) boostcoder - 26.5.2011, 12:09 |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
не пойму, может сегодня магнитная буря ?.. делайте класс пары, который шаблонным конструктором принимает нужные аргументы и приводит их к строковому виду.. так как делает это add_prop.. а после применяете список инициализации.. Это сообщение отредактировал(а) mes - 26.5.2011, 12:24 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
возможно но все равно, я не понимаю что Вы хотите сказать.. вопрос не о шаблонном кострукторе. и не в том, что он должен делать. а в том, как реализовать функцию принимающую произвольное кол-во моих пар. вот. тут три функции. а хочется одну.
http://liveworkspace.org/?id=cb7718bf15abd...98b2e2f499ef0c5 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
это зависит от того, что представляет собой пара.. вот например : http://liveworkspace.org/code/13b4276480f9...c9bdf2e5e4698ca |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
ааа.. теперь понял. я как-то не подумал о том, что можно завернуть initializer_list в initializer_list. буду знать. спасибо огромное. так подходит. вопрос закрыт...вроде как.. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
mes, такой еще вопрос:
http://liveworkspace.org/code/0299c51fad60...a343a60d1325cdb |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
абсолютно не понятно, что Вы пытаетесь спросить.. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
кажется понял..
проверю и отпишусь. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |