D vs C++
    , почти сурковская пропаганда: не пора ли C++ потихоньку готовиться к пенсии?
  ![]()  | 
Наши проекты:
 Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту  | 
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS | 
| [216.73.216.5] | 
 
 | 
		
  | 
    Правила раздела:
  | Страницы: (56) « Первая ... 13 14 [15] 16 17 ... 55 56 ( Перейти к последнему сообщению ) | 
    D vs C++
    , почти сурковская пропаганда: не пора ли C++ потихоньку готовиться к пенсии?
  | 
         
         
         
          
           Сообщ.
           #211
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Описывать метод сериализации для каждого своего типа как-то не очень удобно. Обычно это довольно рутинный copy-paste код. Кстати маршалинг/демаршалинг в xml/json структур в Go не затрагивает скрытые поля структур. ЕМНИП до них и через рефлексию не достучаться.  | 
    
| 
         
         
         
          
           Сообщ.
           #212
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата korvin @  Обычно это довольно рутинный copy-paste код. Это смотря какой движок сериализации. Например, в boost.serialization ты фактически просто указываешь, что хочешь сериализовать. Для сериализации/десериализации: ![]() ![]()     template<class Archive>     void serialize(Archive & ar, const unsigned int version)     {         ar & x;         ar & y;         ar & z;     } Так же есть возможность разделить сохранение и загрузку(определив методы save и load, а не serialize)  | 
    
| 
         
         
         
          
           Сообщ.
           #213
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата D_KEY @  Кстати, это тоже интересный момент: как указать поля которые нужно сериализовать, или наоборот не нужно. В D есть фича, которую можно для этого применить. Это так называемые UDA - user defined attribute. По сути - это что-то вроде пометок, которые ни на что не влияют, но которые можно читать (compile time) и предпринимать в зависимости от этого какие-то действия. Пример: http://dpaste.dzfl.pl/120ff9a20956 	 Например, в boost.serialization ты фактически просто указываешь, что хочешь сериализовать.  | 
    
| 
         
         
         
          
           Сообщ.
           #214
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Потому что если у меня есть поле-мьютекс, то копироваться такой объект не будет. Т.е. поля структуры управляют поведением такого конструктора. А тут не управляют - сериализуемость определяется тем, что мы можем пройтись по типу рефлексией. Для мьютекс эта чудо-сериализация запишет его дескриптор. Цитата korvin @  Описывать метод сериализации для каждого своего типа как-то не очень удобно Меня больше волнует правильность, а не удобство поведения по умолчанию, чреватого детскими грабельками. Цитата korvin @  Обычно это довольно рутинный copy-paste код. Это зависит от библиотеки сериализации. Я не замечал копипасты. Кроме того, метаинформацию никто не отменял. Вон и applegame её для себя открыл.  | 
    
| 
         
         
         
          
           Сообщ.
           #215
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          А тут и не должно, т.к. как уже говорилось, Base не реализует IFoo. Но вот так должно: 
        
      ![]() ![]() 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 интерфейса }  | 
    
| 
         
         
         
          
           Сообщ.
           #216
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Кстати, о птичках. В примере на D мы видим рефлексию времени компиляции по типу, а не времени исполнения по объекту, следовательно, если подпихнуть наследника под видом предка, шаблон инстанцируется для предка и сериализует не всё - fail.   
        
       | 
    
| 
         
         
         
          
           Сообщ.
           #217
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Вообще, с интерфейсами и в Плюсах следует быть осторожным. Легко запутаться в virtual и не virtual. Пример тут.   
        
       | 
    
| 
         
         
         
          
           Сообщ.
           #218
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата MyNameIsIgor @  Потому что если у меня есть поле-мьютекс, то копироваться такой объект не будет. Т.е. поля структуры управляют поведением такого конструктора. Тут согласен, да. Но это же пример, можно будет дать возможность запретить сериализацию для типа или еще как-то решить данную проблему.  | 
    
| 
         
         
         
          
           Сообщ.
           #219
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата MyNameIsIgor @  Меня больше волнует правильность, а не удобство поведения по умолчанию, чреватого детскими грабельками. Цитата MyNameIsIgor @  Для мьютекс эта чудо-сериализация запишет его дескриптор. А зачем вообще может понадобиться сериализовать такое значение? Я не храню в данных, предназначенных для передачи во вне/приеме извне какие-то служебные объекты, только "plain data".  | 
    
| 
         
         
         
          
           Сообщ.
           #220
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата D_KEY @  Но это же пример, можно будет дать возможность запретить сериализацию для типа Да пусть так. Я о другом говорю: чуть заходит разговор за рефлексию, как кричат "сериализация!". Я же говорю, что рефлексия при сериализации чаще всего вредна. Цитата korvin @  Я не храню в данных, предназначенных для передачи во вне/приеме извне какие-то служебные объекты, только "plain data" Погоди, plain data - это детали реализации. Если ты выставил их наружу так, что их видит библиотека сериализации, то я уже считаю это ошибкой проектирования.  | 
    
| 
         
         
         
          
           Сообщ.
           #221
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата  - встроенные ассоциативные массивы. Не знаю, звучала ли тут уже эта мысль. std::map и std::hash_map - вполне себе встроенные в язык C++. Метапрограммирование говоришь? Можете закапывать - не нужно. Рефлекшн... ну, бывает полезен.  | 
    
| 
         
         
         
          
           Сообщ.
           #222
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата Бобёр @  Метапрограммирование говоришь? Можете закапывать - не нужно. Цитата Бобёр @  Взаимоисключающие параграфы Не знаю, звучала ли тут уже эта мысль. std::map и std::hash_map - вполне себе встроенные в язык C++.   Добавлено Цитата Qraizer @  Вообще, кто-то просил сериализацию, получил сериализацию, но ни одного комментария на эту тему так и не сделал. Вообще, с интерфейсами и в Плюсах следует быть осторожным. Легко запутаться в virtual и не virtual. Пример тут.     | 
    
| 
         
         
         
          
           Сообщ.
           #223
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата applegame @  Вообще, кто-то просил сериализацию, получил сериализацию, но ни одного комментария на эту тему так и не сделал А вы ошибку то исправлять не собираетесь?  | 
    
| 
         
         
         
          
           Сообщ.
           #224
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата MyNameIsIgor @  Погоди, plain data - это детали реализации. Если ты выставил их наружу так, что их видит библиотека сериализации, то я уже считаю это ошибкой проектирования.  Ты вообще о чем? У меня просто в тех местах, где требуется маршалинг/демаршалинг, нет «объектов» с закрытыми полями, только структуры с открытыми.  | 
    
| 
         
         
         
          
           Сообщ.
           #225
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата korvin @  У меня просто в тех местах, где требуется маршалинг/демаршалинг, нет «объектов» с закрытыми полями, только структуры с открытыми. прикольно. то есть если бы ты писал excel, то у тебя бы документ представлял бы собой такую вот огромную структуру с открытыми полями?  |