Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> подскажите с реализацией функции. 
V
    Опции темы
baldina
Дата 26.5.2011, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



вот смотрите:

Код

add_prop(
   "prop_name2",
   prop_value2
);


prop_value2 может принимать значения типа из некоторого набора типов. со значением "prop_name2" этот тип не связан. так что если у вас variant из того самого набора, то ничего не меняется.
если же Вы захотите связать имя свойства и тип (что имхо излишне), это совсем другая история и архитектура

Добавлено через 3 минуты и 33 секунды
Цитата(baldina @  26.5.2011,  11:23 Найти цитируемый пост)
со значением "prop_name2" этот тип не связан

именно поэтому вся задача сводится к преобразованию типов в строки (сериализация), но не к проверке типов

Добавлено через 7 минут и 33 секунды
вообще, чувствуется желание задать параметры JSON естественным образом, синтаксически наиболее близким к javascript
это можно сделать, перегружая операции (примерно как делается грамматика в boost::spirit)
PM MAIL   Вверх
boostcoder
Дата 26.5.2011, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



baldina, не понимаю что Вы хотите сказать..

из таких операций:
Код

int iv = 33;
double dv = 3.14159265;
std::string sv = "string value";
std::vector<std::string> sa = {"value1", "value2", "value3"};

add_prop(
   "name1",
   iv
);
add_prop(
   "name2",
   dv
);
add_prop(
   "name3",
   sv
);
add_prop(
   "name4",
   sa
);

получаю это:
Код

{
   "name1": 33,
   "name2": "3.14159265",
   "name3": "string value",
   "name4": [
      "value1",
      "value2",
      "value3"
   ]
}


как Вы предлагаете такого добиться, не имея информации о типе?

Добавлено через 1 минуту и 32 секунды
Цитата(baldina @  26.5.2011,  11:23 Найти цитируемый пост)
именно поэтому вся задача сводится к преобразованию типов в строки (сериализация), но не к проверке типов

та я не проверяю типы!
информация о типе мне нужна для того, чтоб соответствующим образом сформировать json-запись для этого типа!
 smile

Добавлено через 1 минуту и 52 секунды
вопрос закрыт.
всем спасибо.

PM WWW   Вверх
mes
Дата 26.5.2011, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  26.5.2011,  10:33 Найти цитируемый пост)
как Вы предлагаете такого добиться, не имея информации о типе?

сделать класс _свойство_, который будет принимать типизированное значение и приводить сразу к строке.. 



--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 26.5.2011, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mes @  26.5.2011,  11:59 Найти цитируемый пост)
сделать класс _свойство_, который будет принимать типизированное значение и приводить сразу к строке..

у меня так и происходит. только в методе add_prop()
но я хочу избавиться от ручного кода и явного временного объекта. поэтому перенес в конструктор: http://liveworkspace.org/code/7f4928a72ee9...f4c35768df4a0eb
теперь осталось понять каким образом написать функцию принимающую 3-13 аргументов... наверное придется написать 10 функций. ничего иного в голову не приходит..

Добавлено через 9 минут и 19 секунд
в общем получилось как и хотел smile
Код

func({"arg0", i});

func(
   {"arg0", i},
   {"arg1", d}
);

func(
   {"arg0", i},
   {"arg1", d},
   {"arg2", "val"}
);



Это сообщение отредактировал(а) boostcoder - 26.5.2011, 12:09
PM WWW   Вверх
mes
Дата 26.5.2011, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  26.5.2011,  11:04 Найти цитируемый пост)
теперь осталось понять каким образом написать функцию принимающую 3-13 аргументов... наверное придется написать 10 функций. ничего иного в голову не приходит..


не пойму, может сегодня магнитная буря ?..  

делайте класс пары, который шаблонным конструктором принимает нужные аргументы и приводит их к строковому виду..
так как делает это add_prop.. а после применяете список инициализации.. 


Это сообщение отредактировал(а) mes - 26.5.2011, 12:24


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 26.5.2011, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mes @  26.5.2011,  12:24 Найти цитируемый пост)
может сегодня магнитная буря ?

возможно smile

но все равно, я не понимаю что Вы хотите сказать..
вопрос не о шаблонном кострукторе. и не в том, что он должен делать.
а в том, как реализовать функцию принимающую произвольное кол-во моих пар.
вот. тут три функции.
а хочется одну.
Код

func({"arg0", i});
func(
   {"arg0", i},
   {"arg1", d}
);
func(
   {"arg0", i},
   {"arg1", d},
   {"arg2", "val"}
);

http://liveworkspace.org/?id=cb7718bf15abd...98b2e2f499ef0c5
PM WWW   Вверх
mes
Дата 26.5.2011, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  26.5.2011,  11:30 Найти цитируемый пост)
а в том, как реализовать функцию принимающую произвольное кол-во моих пар.

это зависит от того, что представляет собой пара.. вот например  :

http://liveworkspace.org/code/13b4276480f9...c9bdf2e5e4698ca


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 26.5.2011, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mes @  26.5.2011,  12:50 Найти цитируемый пост)
вот например

ааа..
теперь понял.
я как-то не подумал о том, что можно завернуть initializer_list в initializer_list. буду знать.

спасибо огромное.
так подходит.

вопрос закрыт...вроде как..
PM WWW   Вверх
boostcoder
Дата 29.5.2011, 05:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



mes, такой еще вопрос:
Код

#include <iostream>
#include <string>

#include <boost/fusion/support/pair.hpp>
#include <boost/fusion/include/pair.hpp>

template<typename... Args>
void func(const Args&... args) {
}

int main() {
   
   // хочу инициализировать произвольное кол-во fusion::pair
   // мне не известно ни кол-во pair` ов, ни типы для них
   func<
      <int, int>, // first-second
      <char, double> // first-second
   >();
}

http://liveworkspace.org/code/0299c51fad60...a343a60d1325cdb
PM WWW   Вверх
mes
Дата 30.5.2011, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата

   // хочу инициализировать произвольное кол-во fusion::pair
   // мне не известно ни кол-во pair` ов, ни типы для них

абсолютно не понятно, что Вы пытаетесь спросить..
 smile 


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 30.5.2011, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



кажется понял..
проверю и отпишусь.
PM WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0552 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.