На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (56) « Первая ... 13 14 [15] 16 17 ...  55 56  ( Перейти к последнему сообщению )  
> D vs C++ , почти сурковская пропаганда: не пора ли C++ потихоньку готовиться к пенсии?
    Цитата MyNameIsIgor @
    Цитата D_KEY @
    Если для составного типа не задана функция сериализации, то он не сериализуем вообще

    fixed.
    Да и я спрашиваю вообще, а не про именно сейчас.

    Описывать метод сериализации для каждого своего типа как-то не очень удобно. Обычно это довольно рутинный copy-paste код.

    Кстати маршалинг/демаршалинг в xml/json структур в Go не затрагивает скрытые поля структур. ЕМНИП до них и через рефлексию не достучаться.
      Цитата korvin @
      Обычно это довольно рутинный copy-paste код.

      Это смотря какой движок сериализации. Например, в boost.serialization ты фактически просто указываешь, что хочешь сериализовать.
      Для сериализации/десериализации:
      ExpandedWrap disabled
            template<class Archive>
            void serialize(Archive & ar, const unsigned int version)
            {
                ar & x;
                ar & y;
                ar & z;
            }

      Так же есть возможность разделить сохранение и загрузку(определив методы save и load, а не serialize)
        Цитата D_KEY @
        Например, в boost.serialization ты фактически просто указываешь, что хочешь сериализовать.
        Кстати, это тоже интересный момент: как указать поля которые нужно сериализовать, или наоборот не нужно. В D есть фича, которую можно для этого применить. Это так называемые UDA - user defined attribute. По сути - это что-то вроде пометок, которые ни на что не влияют, но которые можно читать (compile time) и предпринимать в зависимости от этого какие-то действия. Пример: http://dpaste.dzfl.pl/120ff9a20956
        Сообщение отредактировано: applegame -
          Цитата D_KEY @
          Ну тебя же не смущает дефолтный конструктор копирования, например

          Потому что если у меня есть поле-мьютекс, то копироваться такой объект не будет. Т.е. поля структуры управляют поведением такого конструктора.
          Цитата D_KEY @
          Если все поля у объекта сериализуемы

          А тут не управляют - сериализуемость определяется тем, что мы можем пройтись по типу рефлексией. Для мьютекс эта чудо-сериализация запишет его дескриптор.
          Цитата korvin @
          Описывать метод сериализации для каждого своего типа как-то не очень удобно

          Меня больше волнует правильность, а не удобство поведения по умолчанию, чреватого детскими грабельками.
          Цитата korvin @
          Обычно это довольно рутинный copy-paste код.

          Это зависит от библиотеки сериализации. Я не замечал копипасты. Кроме того, метаинформацию никто не отменял. Вон и applegame её для себя открыл.
          Сообщение отредактировано: MyNameIsIgor -
            Цитата applegame @
            Тут не важно виртуальный базовый класс или нет. Виртуальность ничего не меняет:
            А тут и не должно, т.к. как уже говорилось, Base не реализует IFoo. Но вот так должно:
            ExpandedWrap disabled
              class IFoo {
                  virtual void f() = 0;
                  virtual void g() = 0;
              };
               
              class Base : virtual IFoo {
                  void g() {}
              };
               
              class Derived : public Base, public virtual IFoo {
                  void f() {}
              };
               
              int main() {
                  Derived derived; // нет ошибки, Derived собирает в себе реализации обоих методов единственного абстрактного класса aka интерфейса
              }
            Сообщение отредактировано: Qraizer -
              Кстати, о птичках. В примере на D мы видим рефлексию времени компиляции по типу, а не времени исполнения по объекту, следовательно, если подпихнуть наследника под видом предка, шаблон инстанцируется для предка и сериализует не всё - fail.
                Вообще, с интерфейсами и в Плюсах следует быть осторожным. Легко запутаться в virtual и не virtual. Пример тут.
                  Цитата MyNameIsIgor @
                  Цитата D_KEY @
                  Ну тебя же не смущает дефолтный конструктор копирования, например

                  Потому что если у меня есть поле-мьютекс, то копироваться такой объект не будет. Т.е. поля структуры управляют поведением такого конструктора.

                  Тут согласен, да. Но это же пример, можно будет дать возможность запретить сериализацию для типа или еще как-то решить данную проблему.
                    Цитата MyNameIsIgor @
                    Меня больше волнует правильность, а не удобство поведения по умолчанию, чреватого детскими грабельками.

                    Цитата MyNameIsIgor @
                    Для мьютекс эта чудо-сериализация запишет его дескриптор.

                    А зачем вообще может понадобиться сериализовать такое значение? Я не храню в данных, предназначенных для передачи во вне/приеме извне какие-то служебные объекты, только "plain data".
                      Цитата D_KEY @
                      Но это же пример, можно будет дать возможность запретить сериализацию для типа

                      Да пусть так. Я о другом говорю: чуть заходит разговор за рефлексию, как кричат "сериализация!". Я же говорю, что рефлексия при сериализации чаще всего вредна.
                      Цитата korvin @
                      Я не храню в данных, предназначенных для передачи во вне/приеме извне какие-то служебные объекты, только "plain data"

                      Погоди, plain data - это детали реализации. Если ты выставил их наружу так, что их видит библиотека сериализации, то я уже считаю это ошибкой проектирования.
                      Сообщение отредактировано: MyNameIsIgor -
                        Цитата
                        - встроенные ассоциативные массивы.

                        Не знаю, звучала ли тут уже эта мысль. std::map и std::hash_map - вполне себе встроенные в язык C++.
                        Метапрограммирование говоришь? Можете закапывать - не нужно.
                        Рефлекшн... ну, бывает полезен.
                          Цитата Бобёр @
                          Метапрограммирование говоришь? Можете закапывать - не нужно.

                          Цитата Бобёр @
                          Не знаю, звучала ли тут уже эта мысль. std::map и std::hash_map - вполне себе встроенные в язык C++.
                          Взаимоисключающие параграфы :D

                          Добавлено
                          Цитата Qraizer @
                          Вообще, с интерфейсами и в Плюсах следует быть осторожным. Легко запутаться в virtual и не virtual. Пример тут.
                          Вообще, кто-то просил сериализацию, получил сериализацию, но ни одного комментария на эту тему так и не сделал. ;)
                            Цитата applegame @
                            Вообще, кто-то просил сериализацию, получил сериализацию, но ни одного комментария на эту тему так и не сделал

                            А вы ошибку то исправлять не собираетесь?
                              Цитата MyNameIsIgor @
                              Погоди, plain data - это детали реализации. Если ты выставил их наружу так, что их видит библиотека сериализации, то я уже считаю это ошибкой проектирования.

                              Ты вообще о чем? У меня просто в тех местах, где требуется маршалинг/демаршалинг, нет «объектов» с закрытыми полями, только структуры с открытыми.
                                Цитата korvin @
                                У меня просто в тех местах, где требуется маршалинг/демаршалинг, нет «объектов» с закрытыми полями, только структуры с открытыми.

                                прикольно. то есть если бы ты писал excel, то у тебя бы документ представлял бы собой такую вот огромную структуру с открытыми полями?
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (56) « Первая ... 13 14 [15] 16 17 ...  55 56


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0609 ]   [ 15 queries used ]   [ Generated: 18.06.25, 18:13 GMT ]