Switch to English?
Yes
Переключитись на українську?
Так
Переключиться на русскую?
Да
Przełączyć się na polską?
Tak
Opublikuj swoje zlecenie za darmo i otrzymaj oferty od wykonawców freelancerów już minutę po opublikowaniu!

C++ верификация сериализации класса.

25 PLN

Załączniki 1

Wgląd do aplikacji jest dostępny tylko zarejestrowanym użytkownikom.
    Jeszcze 2 ofert jest ukrytych
  • Profil został usunięty
    26 wrzesnia 2019, 23:46 |

    Необходимо реализовать Comparison and Copy assignment operator класса 

    Какой класс имеется в виду?

    Вот такая реализация:

    class T {
    ...
    bool operator == (const T& other) const
     { return memcmp(this, &other, sizeof(*this)) = 0; }
    T(const T& other) { memcpy(this, &other, sizeof(*this)); }
    ...
    }

    Подойдёт? 🙂)

    PS: ни один компилятор при написании данного кода не пострадал 🙂

  • Alex Karp Стартап
    27 wrzesnia 2019, 20:55 |

    В вашем коде я увидел оператор сравнения и копи конструктор. Так что этот код не подойдет).

  • Sergey Nazarenko
    28 wrzesnia 2019, 21:37 |

    Скажите, а Вам нужно сравнивать и присваивать какой-то конкретный класс? Или нужно универсальное решение?

  • Alex Karp Стартап
    28 wrzesnia 2019, 21:59 |

    Это нужно для конкретного класса с мемберами.

  • Sergey Nazarenko
    28 wrzesnia 2019, 22:01 |

    Так может Вы определение класса приложите (из h-файла)?

    А то ща подпишемся за 300 грн на Вашу задачу, а там окажется сто-пятсот мемберов, которые сами являются классами, внутри которых хранятся классы, и все это с перекрестными ссылками... и там работы на 10 лет.

  • Alex Karp Стартап
    28 wrzesnia 2019, 22:00 |

    Можете так же ответить на следующие вопросы: есть ли опыт компиляции под Linux, опыт написания UI (wxWidgets ), написания клиент-серверных приложений и готовы ли к оплате труда после того как решение пройдет кодревью? Задачек много и разных.

  • Sergey Nazarenko
    28 wrzesnia 2019, 22:06 |

    Опыт компиляции под Linux есть, но ему уже около 20 лет и я уже и не вспомню как этот Linux установить, не то, что там что-то компилировать 😔
    wXWidgets - даже не слышал о таком.
    Опыт написания клиент-серверных приложений есть небольшой, но тоже давненько это было.
    Так что пойду я, наверное, мимо этой задачи.


    Оплата после код-ревью - вполне нормально, если заказчику доверяешь. Не знаю почему, но к Вам у меня пока доверия нет.


    А вообще, все эти нюансы нужно было с самого начала в тексте задачи указать.
    Сэкономили бы много времени себе и людям.
    Всего доброго.

  • Profil został usunięty
    28 wrzesnia 2019, 23:19 |

    Задачек много и разных 

    Отлично! Ради этого мы все здесь и собрались 🙂

    Задачи целесообразно формировать отдельными проектами, где чётко прописывать все особенности выполнения: и исполнителям проще будет понять, что требуется/ожидается, и вам, как заказчику, по откликам будет понятно, кто вам подходит.

    Так что ждём-с 🙂

  • Alex Karp Стартап
    29 wrzesnia 2019, 0:41 |

    Добавил архив с описанием класса.

  • Alex Karp Стартап
    29 wrzesnia 2019, 0:52 |

    Уточняю, текущая задача требует только базовых знаний C++. Дополнительные вопросы, которые я задал помогут мне только в выборе исполнителя(ей) для возможного долгосрочного сотруднечиства.

  • Profil został usunięty
    29 wrzesnia 2019, 1:20 |

    Было бы отлично ещё уточнить постановку задачи, потому что необходимость в copy assignment operator выглядит неочевидной в контексте тестирования сериализации.

    А comparison operator имеет смысл делать в такой манере:

    void operator == (const T& other) {
      std::stringstream ss1;
      boost::archive::text_oarchive oa1{ss1}; 
      oa1 << *this;
      std::stringstream ss2;
      boost::archive::text_oarchive oa2{ss2}; 
      oa2 << other;
      return ss1 == ss2;
    }

    Это, конечно, то ещё курощение, но позволит избавиться от copy'n'paste. И если это только для тестов, то ... пойдёт 🙂

    Вообще это всё можно засунуть поглубже в ... unit-test, чтоб кто-то случайно не начал использовать в production 🙂

  • Alex Karp Стартап
    29 wrzesnia 2019, 9:35 |

    Обновил описание задачки.

  • Profil został usunięty
    29 wrzesnia 2019, 10:20 |
    BaseClass* mock_inst;// наследник от BaseClass который инициализирует мемберы тестовыми данными
    BaseClass* test_inst;
    
    test_inst = mock_inst; 

    Наверное, последнее присваивание должно быть в таком виде:

    *test_inst = *mock_inst; 

    Но и после этого непонятно, зачем оно в unit-test'е 🙂

    В контексте вашего толстого класса SlotBase оператор присваивания как и оператор копирования имеет смысл вообще запретить (потому что у вас там намечается толпа потомков), и если нужна копия объекта (но опять же вопрос - зачем?), то думать в направлении "клонирования":

    SloteBase* clone() const;

    PS: не сразу заметил, что у вас все data members сделаны protected - it's just a bad idea 🙂

  • Alex Karp Стартап
    29 wrzesnia 2019, 10:39 |

    В описании задачи нет запроса на поиск решения. Прошу, прекратить предлагать не работающий код.

  • Sergey Nazarenko
    29 wrzesnia 2019, 11:30 |

    Я так понимаю, что Алекс как раз и хочет, чтобы ему сделали оператор присваивания, который будет грамотно весь айсберг всю иерархию аккуратно рекурсивно копировать, заменяя ссылки на данные ссылками на копии этих данных.
    Ну и оператор сравнения ему аналогичный нужен. Чтобы он не ссылки сравнивал, а данные в этих ссылках. Причем, рекурсивно по всей иерархии вложенных объектов.

    И все это за 300 грн!

    Алекс. У Вас есть шанс найти исполнителя, который Вам сделает эту задачу, если Вы в бюджет пару нулей справа допишете.

  • Alex Karp Стартап
    29 wrzesnia 2019, 12:05 |

    Там нет не ссылок не рекурсии, вы почему то любите все усложнять и драматизировать. Сергей, эта задача не для вас.

  • Sergey Nazarenko
    29 wrzesnia 2019, 13:58 |

    То, что я не умею пользоваться компилятором под Линукс еще не говорит, что я ничего не понимаю в С++.


    Если там нет ссылок и вложенных объектов, то чем Вам memcpy не подходит?


    И я хоть и не Сеньйор С++, но имеющихся у меня знаний достаточно, чтобы понимать, что вот это все

            std::vector<array_2d_t> m_view_symbols{};

            std::vector<int> m_wild_sticky{};

            array_2d_t m_view_symbols_prev{};

            std::vector<unsigned> m_stop_numbers_from_file;

            std::function<int(SlotBase&, unsigned)> m_get_stop_number_func;

            std::vector<std::vector<std::string>> m_symbols_names;

            std::vector<array_2d_t> m_paytable{};

            array_2d_t m_lines_combinations;

            array_1d_t<int> m_reels_stops;

            array_1d_t<int> m_free_game_scatter_multiplier_table;

            array_1d_t<int> m_scatter_multiplier_table;

            array_1d_t<int> m_wild_multiplier_table;

            array_1d_t<int> m_bonus_multiplier_table;

            array_1d_t<int> m_free_game_table;

            array_1d_t<int> m_bonus_game_table;

            array_1d_t<bool> m_bonus_on_any_pay_line;

            std::string    m_game_id;

            std::vector<array_2d_t> m_reels_collection{};

            std::string m_file_name;

            std::vector<int> m_scatter_number{};

            std::vector<int> m_wild_number{};

            std::vector<int> m_bonus_number{};

            std::vector<int> m_free_games_multiplier_table{}; 

            std::unordered_map<std::string, std::string> m_bonus_game_result;

            std::vector<array_1d_t<int>> m_wild_for_table;

            mutable std::vector<std::vector<std::vector<double>>> m_symbol_money;

            mutable std::vector<array_2d_t> m_game_symbols_hit_rate;

            mutable std::vector<double> m_games_money{ 0.0 }; 

            mutable std::vector<double> m_games_max_win{ 0.0 };

            mutable std::vector<long long> m_games_hit_rate{ 0 };

            mutable std::vector<long long> m_total_num_of_games{ 0 };

    является вложенными объектами и коллекциями, которые придется копировать достаточно аккуратно, чтобы быть уверенным в том, что копия нашего объекта хранит копии (а не оригиналы) вложенных объектов и коллекций.

  • Alex Karp Стартап
    29 wrzesnia 2019, 15:19 |

    Предположу, что смущает array_2d_t, array_1d_t. Так что добавлю следующее описание:


    using array_2d_t = std::vector<std::vector<int>>;

    template<typename dataT>
    using array_1d_t = typename std::vector<dataT>;


    Но опять таки, Сергей эта задача не для вас. Не тратьте свое и мое время.

  • Sergey Nazarenko
    29 wrzesnia 2019, 15:23 |

    Судя по бюджету задачи, там работы менее, чем на 1 час.
    Судя по Вашим комментариям - Вы лучше нас разбираетесь в задаче.
    Вы уже значительно больше времени потратили на создание этой задачи и ее обсуждение.
    Почему бы Вам самому ее не сделать?

  • Alex Karp Стартап
    29 wrzesnia 2019, 15:37 |

    Абсолютно верно, работы на 1-2 часа. И я действительно потратил больше времени на обсуждение, но как я уже говорил простых задачек много и нужно найти человека, который потихоньку бы их делал, а я в это время смог решать другие задачи. Так, что надеюсь найти компетентного исполнителя и готов на это потратить столько времени сколько понадобится.

  • Profil został usunięty
    29 wrzesnia 2019, 17:03 |

    в этом списке единственный data member, возможно, потребует особого обращения:

    std::function<int(SlotBase&, unsigned)> m_get_stop_number_func; 

    Всё остальное можно сделать типичным присваиванием и сравнением.

    Подобная задачка сводится по сути к "набору текста", что заказчик мог бы и указать в формулировке - это сэкономило массу времени всем незаинтересованным сторонам 🙂

Aktualne zlecenia dla freelancerów w kategorii C i C++

Rewersowe inżynieria konsolowych narzędzi do ankietowania kontrolerów SSD (Flash ID)

1. Cel pracy Wydzielenie interfejsu programowania aplikacji (API) do interakcji z kontrolerami SSD/NVMe z dostarczonego zestawu narzędzi konsolowych (Phison, Silicon Motion, Realtek, Maxiotek, Marvell, JMicron itd.). Wynikiem ma być działający kod w języku C/C++ lub dokładna…

C i C++Aplikacje desktopowe ∙ 3 dni 1 godzina temu ∙ 5 ofert

Opracowanie mapy nasion Minecraft Java / przeglądarki nasion dla strony internetowej

Opracowanie mapy nasion Minecraft Java / Podgląd nasion dla strony internetowejOpis projektu Potrzebne jest opracowanie narzędzia opartego na przeglądarce Mapa nasion Minecraft Java / Podgląd nasion, które będzie działać na naszej stronie i pozwoli użytkownikowi wprowadzić…

C i C++Układ HTML i CSS ∙ 3 dni 8 godzin temu ∙ 14 ofert

Porównawcza analiza efektywności oprogramowania dostosowanego (v2.2-field) i oprogramowania referencyjnego (Meshtastic v2.x)

82 PLN

Porównawcza analiza efektywności oprogramowania dostosowanego (v2.2-field) i oprogramowania referencyjnego (Meshtastic v2.x) na identycznej platformie sprzętowej (ESP32 + SX1268, 2W) według kryteriów zasięgu, przepustowości, stabilności łącza i zużycia energii. Przeprowadzić…

C i C++C# ∙ 7 dni 15 godzin temu ∙ 2 oferty

Konsultacja i audyt bieżącego projektu na Odoo 19 Community Edition

Szukamy programisty Odoo — samodzielnego dewelopera z doświadczeniem w pracy z Odoo 19 Community Edition, w tym z wykorzystaniem Claude Code. Potrzebujemy specjalisty, który ma zrealizowane projekty w Odoo oraz praktyczne doświadczenie w programowaniu z użyciem Claude Code.…

C i C++Javascript & Typescript ∙ 10 dni 17 godzin temu ∙ 8 ofert

Rozwój oprogramowania dla Arduino (moduły RF 3–7,5 GHz, automatyczne skanowanie częstotliwości)

Należy opracować system na Arduino do automatycznego wyszukiwania aktywnego analogowego sygnału wideo oraz automatycznego dostosowywania nadajnika do wykrytej częstotliwości.Planowane jest wykorzystanie trzech oddzielnych modułów odbiorczo-nadajnych: 3000–4200 MHz; 4900–6000…

C i C++Systemy wbudowane i mikrokontrolery ∙ 11 dni 17 godzin temu ∙ 5 ofert

Zleceniodawca
Alex Karp Стартап
Ukraina Kijów
Zlecenie zostało opublikowane
6 lat temu
114 wyświetleń
Tagi