Switch to English?
Yes
Переключитись на українську?
Так
Переключиться на русскую?
Да
Przełączyć się na polską?
Tak
Разместите свой проект бесплатно и начните получать предложения от фрилансеров-исполнителей уже спустя минуты после публикации!

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

300 UAH

Приложения 1

Просмотр приложений доступен только зарегистрированным пользователям.
  • Профиль удален
    26 сентября 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 сентября 2019, 20:55 |

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

  • Сергей Назаренко
    28 сентября 2019, 21:37 |

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

  • Alex Karp Стартап
    28 сентября 2019, 21:59 |

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

  • Сергей Назаренко
    28 сентября 2019, 22:01 |

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

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

  • Alex Karp Стартап
    28 сентября 2019, 22:00 |

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

  • Сергей Назаренко
    28 сентября 2019, 22:06 |

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


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


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

  • Профиль удален
    28 сентября 2019, 23:19 |

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

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

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

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

  • Alex Karp Стартап
    29 сентября 2019, 0:41 |

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

  • Alex Karp Стартап
    29 сентября 2019, 0:52 |

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

  • Профиль удален
    29 сентября 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 сентября 2019, 9:35 |

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

  • Профиль удален
    29 сентября 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 сентября 2019, 10:39 |

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

  • Сергей Назаренко
    29 сентября 2019, 11:30 |

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

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

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

  • Alex Karp Стартап
    29 сентября 2019, 12:05 |

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

  • Сергей Назаренко
    29 сентября 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 сентября 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>;


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

  • Сергей Назаренко
    29 сентября 2019, 15:23 |

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

  • Alex Karp Стартап
    29 сентября 2019, 15:37 |

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

  • Профиль удален
    29 сентября 2019, 17:03 |

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

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

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

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

Актуальные фриланс-проекты в категории C и C++

Реверс-инжиниринг консольных утилит для опроса контроллеров SSD (Flash ID)

1. Цель работы Выделение программного интерфейса (API) взаимодействия с контроллерами SSD/NVMe из предоставленного набора консольных утилит (Phison, Silicon Motion, Realtek, Maxiotek, Marvell, JMicron и др.). Результатом должно стать рабочий код на языке C/C++ или точная…

C и C++Десктопные приложения ∙ 2 дня назад ∙ 5 ставок

Разработка карты семян Minecraft Java / просмотрщика семян для сайта

Разработка карты семян Minecraft Java / Seed Viewer для сайтаОписание проекта Необходимо разработать браузерный инструмент Minecraft Java Seed Map / Seed Viewer, который будет работать на нашем сайте и позволит пользователю ввести семя Minecraft Java Edition и просмотреть…

C и C++HTML и CSS верстка ∙ 2 дня 6 часов назад ∙ 14 ставок

Сравнительный анализ эффективности кастомного ПО (v2.2-field) и эталонного ПО (Meshtastic v2.x)

1000 UAH

Сравнительный анализ эффективности кастомного ПО (v2.2-field) и эталонного ПО (Meshtastic v2.x) на идентичной аппаратной платформе (ESP32 + SX1268, 2W) по критериям дальности, пропускной способности, стабильности линка и энергопотребления. Провести тесты с замерами с учетом…

C и C++C# ∙ 6 дней 14 часов назад ∙ 2 ставки

Консультация и аудит текущего проекта на Odoo 19 Community Edition

Ищем Odoo разработчика — соло-разработчика с опытом разработки на Odoo 19 Community Edition, в том числе с использованием Claude Code. Нам нужен специалист, который успешно реализовал проекты в Odoo и имеет практический опыт разработки с использованием Claude Code. Важно:…

C и C++Javascript и Typescript ∙ 9 дней 15 часов назад ∙ 8 ставок

Разработка ПО для Arduino (RF-модули 3–7.5 ГГц, автоматическое сканирование частот)

Необходимо разработать систему на Arduino для автоматического поиска активного аналогового видеосигнала и автоматической настройки передатчика на обнаруженную частоту.Планируется использование трех отдельных приемно-передающих модулей: 3000–4200 МГц; 4900–6000 МГц; 6100–7500…

C и C++Встраиваемые системы и микроконтроллеры ∙ 10 дней 15 часов назад ∙ 5 ставок

Заказчик
Alex Karp Стартап
Украина Киев
Проект опубликован
6 лет назад
114 просмотров
Метки
  • C\C для Windows