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++

Програма для показу MS PowerPoint всередині вікна

785 UAH

Потрібно розробити програму для ПК на Windows, всередині вікна якої буде відкриватися вікно PowerPoint з показом MS PowerPoint файли-демонстрації (розширення ppsx). Важливо, щоб при натисканні ESC під час перегляду, виходило вікно програми з кнопками підтвердження бажання…

C та C++Python ∙ 1 ставка

Проект по розробці програмного забезпечення для мікроконтролерів

Вітаю шановні! Шукаю спеціаліста або команду, яка зможе розробити програмну частину для розповсюджених мікроконтролерів типу Arduino, ESP або Raspberry-Pi. Ключові моменті: - контролер повинен отримувати на вхід 5 аналогових сигналів, - на виході повинен видавати також 5…

C та C++Системне програмування ∙ 2 ставки

Скрипт, який буде взаємодіяти за допомогою зображення

Потрібен скрипт, який буде взаємодіяти за допомогою зображення + тексту (назва товару на екрані) + ціни. Проще кажучи, скрипт повинен натискати на логотип платформи (зліва зверху білий текст), щоб оновлювати асортимент товарів (кожні 3-5 секунд), потім повинен бути пошук за…

C та C++Python ∙ 8 ставок

Створення телеграм бота з інтеграцією GPT

12 000 UAH

Технічна задача : 1) створити телеграм бота за прикладом, У зв’язку з цим слід запитати мову: - Російська - Англійська Все інше за прикладом першого бота: запропонувати відправити фото з якого буде взято обличчя, другий - попросити відео на яке буде накладено обличчя.…

C та C++Python ∙ 12 ставок

Налаштувати обмін данними між jetson nano та іншим пристроєм по can ши

Налаштувати обмін данними між jetson nano та іншим пристроєм по can шині за допомогою RS485 CAN документація і приклади тут: https://www.waveshare.com/wiki/RS485_CAN_for_Jetson_Nano Пакет даних, що передаються розбивається на фрейми розміром по 8 байт, кодування перших 7 байт…

C та C++Linux та Unix ∙ 2 ставки

Замовник
Alex Karp Стартап
Україна Київ
Проєкт опублікований
4 роки тому
114 переглядів
Мітки
  • C\C для Windows