синтаксический сахар
От: niXman Ниоткуда https://github.com/niXman
Дата: 06.02.19 17:37
Оценка:
привет!

хочу избавиться от макроса YAS_OBJECT().

этот макрос из этого: YAS_OBJECT("object name", i1, d2), генерит это:
int main() {
  int i1, d2;
  auto o = ::yas::make_object< // make_object - https://github.com/niXman/yas/blob/master/include/yas/object.hpp#L154
    typename ::yas::detail::mergesort< // mergesort - https://github.com/niXman/yas/blob/master/include/yas/detail/tools/ctsort.hpp#L153
      ::yas::detail::predic_less,
      std::tuple<
        std::pair<
          std::integral_constant<std::uint32_t, ::yas::detail::fnv1a("i1")>, // считаем хеш ключей в компайлтайм.
          std::integral_constant<std::uint8_t, 0>
        >,
        std::pair<
          std::integral_constant<std::uint32_t, ::yas::detail::fnv1a("d2")>,
          std::integral_constant<std::uint8_t, 1>
        >
      >
    >::type
  > // параметры закончились.
  ( // аргументы.
    "object name",
    ::yas::make_val("i1", i1), // make_val - https://github.com/niXman/yas/blob/master/include/yas/object.hpp#L96
    ::yas::make_val("d2", d2)
  );
}


yas::make_object<>() — шаблонная функция, в качестве параметров принимает набор пар, где first — хеш ключа, а second — порядковый номер. этот набор пар сортируется в компайлтайм при помощи yas::detail::mergesort(ссылка в коде). сортировка нужна чтоб в компайлтайм инициализировать мапу, которая используется для сопоставления ключей значениям в json.
yas::make_object<>() возвращает тип yas::object<>https://github.com/niXman/yas/blob/master/include/yas/object.hpp#L112

вобщем, хочется как-то избавиться от макроса и при этом получить какой-то человеческий синтаксис, что-то типа:
yas::object o = {
  "object name",
  {"i1", i1},
  {"d2", d2}
};


какие идеи?


спасибо.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Отредактировано 06.02.2019 17:42 niXman . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.