gcc VS msvc

Тема в разделе "WASM.HEAP", создана пользователем cupuyc, 29 окт 2009.

  1. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    cppasm
    читай выше?
    И вообще и без плюсов можно, прояви фантазию, замени функции члены на функции
     
  2. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    SPA
    там сложно быть внимательным, куча одинаковых строчек кода - глаза разбегаются
    причем от этой копипасты можно было бы избавиться и сделать код понятнее

    у меня код для сериализации выглядит примерно так
    Код (Text):
    1.         template<typename Archive>
    2.         class basic_iarchive
    3.         {
    4.                 friend class serialization::type_mux;
    5.  
    6.                 // get the most derived type ptr
    7.                 Archive* This()
    8.                 {
    9.                         return static_cast<Archive*>(this);
    10.                 }
    11.         protected:
    12.                 basic_iarchive() {}
    13.  
    14.                 //векторы
    15.                 template<typename valueT>
    16.                 void copy(std::vector<valueT>& t)
    17.                 {
    18.                         type_mux::detect_array_type<valueT>::type::copy(
    19.                                 *This(),&t.front(),t.size(),sizeof(valueT));
    20.                 }
    21.  
    22.                 //другие типы
    23.                 template<typename T>
    24.                 void copy(T& t)
    25.                 {
    26.                         type_mux::detect_type<T>::type::copy(*This(),t);
    27.                 }
    28.  
    29.         public:
    30.                 typedef boost::mpl::true_ is_loading;
    31.                 typedef boost::mpl::false_ is_saving;
    32.  
    33.                 template<typename T> Archive& operator>>(T& t) { This()->copy(t); return *This(); }
    34.                 template<typename T> Archive& operator& (T& t) { This()->copy(t); return *This(); }
    35.         };
    Код (Text):
    1. class type_mux
    2. {
    3. public:
    4.         //простые типы: делегируем сериализацию потомку
    5.         struct simple_type
    6.         {
    7.                 template<typename Archive,typename T>
    8.                 static void copy(Archive& ar, T& t)
    9.                 {
    10.                         ar.copy_binary(&t,sizeof(T));
    11.                 }
    12.         };
    13.         //указатели: рекурсивно сериализуем значение по указателю
    14.         struct pointer_type
    15.         {
    16.                 template<typename Archive,typename T>
    17.                 static void copy(Archive& ar, T& t)
    18.                 {
    19.                         ar.copy(*t);
    20.                 }
    21.         };
    22.         //массивы простых типов: сериализуем весь массив целиком
    23.         struct array_of_simple_type
    24.         {
    25.                 template<typename Archive,typename T>
    26.                 static void copy( Archive& ar, T* it, int n, int d )
    27.                 {
    28.                         ar.copy_binary(it,n*d);
    29.                 }
    30.         };
    31.         //массивы сложных типов: рекурсивно сериализуем каждый элемент
    32.         struct array_of_compound_type
    33.         {
    34.                 template<typename Archive,typename T>
    35.                 static void copy( Archive& ar, T* it, int n, int /*d*/ )
    36.                 {
    37.                         for(int i=0;i<n;++i)
    38.                                 ar.copy(*it++);
    39.                 }
    40.         };
    41.         //массивы: сериализуем в зависимости от типа элемента
    42.         struct array_type
    43.         {
    44.                 template<typename Archive,typename T>
    45.                 static void copy(Archive& ar, T& t)
    46.                 {
    47.                         typedef boost::remove_extent<T>::type value_type;
    48.                         int d = static_cast<const char *>(static_cast<const void *>(&t[1]))
    49.                                 - static_cast<const char *>(static_cast<const void *>(&t[0]));
    50.                         int n = sizeof(t)/d;
    51.                         detect_array_type<T>::type::copy(ar,t,n,d);
    52.                 }
    53.         };
    54.         //классы: сериализуем через глобальную функцию serialize()
    55.         struct class_type
    56.         {
    57.                 template<typename Archive,typename T>
    58.                 static void copy(Archive& ar, T& t)
    59.                 {
    60.                         serialize(ar,(T&)t);
    61.                 }
    62.         };
    63. public:
    64.         // метакод детектирующий тип переменной
    65.         template<typename T>
    66.         struct detect_type
    67.         {
    68.                 typedef
    69.                         typename boost::mpl::if_< boost::is_arithmetic<T>,
    70.                                 simple_type,
    71.                         //else
    72.                         typename boost::mpl::if_< boost::is_base_of<make_simple,T>,
    73.                                 simple_type,
    74.                         //else
    75.                         typename boost::mpl::if_< boost::is_array<T>,
    76.                                 array_type,
    77.                         //else
    78.                         typename boost::mpl::if_< boost::is_pointer<T>,
    79.                                 pointer_type,
    80.                         //else
    81.                                 class_type
    82.                         >::type
    83.                         >::type
    84.                         >::type
    85.                         >::type type;
    86.         };
    87.         // метакод детектирующий тип элемента массива
    88.         template<typename valueT>
    89.         struct detect_array_type
    90.         {
    91.                 typedef
    92.                         typename boost::mpl::if_< boost::is_arithmetic<valueT>,
    93.                                 type_mux::array_of_simple_type,
    94.                         //else
    95.                                 type_mux::array_of_compound_type
    96.                         >::type type;
    97.         };
    98. };
     
  3. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    GoldFinch
    лень, люди которые сталкивались с кросплатформеным разбором протокола, и так все эти приемы знают, а кто не знает
     
  4. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    SPA
    конечно хороший код писать лень, да и уметь еще надо
    а копипасту писать просто, только получается почему-то нечитабельно и неюзабельно
     
  5. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    GoldFinch
    мне для доказательства кому то чего то писать код? да я вас умоляю. Я конечно с ума сошел, но не настолько
     
  6. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    GoldFinch
    или может вы хотите заплатить