Rafael 🌵
ну, люди старались, всякие SOAP и JSON-RPC придумывали. Но нафига )
просто у меня уже был почти написан либа для сериализации и десериализации редис протокола, я его вот вчера с вашей помощью дописал и покрыл тестами
Rafael 🌵
в задании меня не просят делать полноценный rpc, нас просто просят реализовать эту обстракцию как угодно
ttldtor
а... хм... задание
ttldtor
а то даже есть на месаджпаке https://github.com/jubatus/jubatus-msgpack-rpc/tree/master/cpp
Rafael 🌵
а то даже есть на месаджпаке https://github.com/jubatus/jubatus-msgpack-rpc/tree/master/cpp
к сожалению это юзать нельзя: Сетевое взаимодействие должно быть вынесено за RPC-слой. RPC-слой вам нужно реализовать самостоятельно. От вас не требуется сверхоптимальный код; от вас требуется создать целостную абстракцию. Клиентский код (использующий RPC-сервис), серверный код (реализующий RPC-сервис), транспортный код (сериализация/десериализация, работа с сетью) должны быть разделены.
Ilia
Может кто-то помнит: где-то год назад на хабре видел игру про решения дедлоков: два треда нужно выполнять код в обоих и добиться дедлока?
Evgeny
https://deadlockempire.github.io/
Ilia
Огонь☺️
Ned
есть тут суперспецы, кто не погнушается почитать нубский код и покритиковать? всё работает, всё компилится, просто хочу здравой критики.
🦥Alex Fails
Довай сюда
Ned
https://bitbucket.org/serafimati/matrixlib/
Ned
rape me
Ned
только ногами не пинайте
Dumitru
А почему все в хэдере? Я спрашиваю для себя, может так и надо делать)
Ned
темплейты - да
Ned
иначе будет хедер тут, реализация там, использование сям
Rafael 🌵
Пожалуй тоже поревьюжу твой кодец
Dumitru
А там же все шаблон
Ned
компиль не умеет в темплейты, ему надо знать, что ты туда подставил
Ned
мне так объяснил кто-то из здешних
Dumitru
Это я понял, просто не заметил что там прям везде шаблоны
Dumitru
мне так объяснил кто-то из здешних
Мне тож, буквально пару дней назад)
Ned
у меня template <class T> на копипастере стоит)
Rafael 🌵
Это кстати отчасти удобно
Rafael 🌵
Когда нужно ограничить типы которые можно использовать
Rafael 🌵
А почему у тебя 8 пробелов это отступ, а не 4?
Ned
а ещё, читал недавно, чтобы не было проблем с компоновкой, все инлайны в тот же хедер, где и класс. если реализуешь прямо в классе, метод инлайн по умолчанию. типа так
Rafael 🌵
Ты в деструкторе не освобождаешь память выделуню через new
Vladislav
логический & вместо && https://bitbucket.org/serafimati/matrixlib/src/d0e395e23b9dd30fc1b8664dedf96fc75063b02f/matrixlib.h?at=master&fileviewer=file-view-default#matrixlib.h-132
Rafael 🌵
orly?
Сек
Rafael 🌵
Возможно я не туда посмотрел
🦥Alex Fails
Ned Ogl , а зачем два класса: row и const row? мб дальше тупо const row язать?
Ned
Ned Ogl , а зачем два класса: row и const row? мб дальше тупо const row язать?
мы с американцем разобрали это как-то ночью. суть там в константности методов и возвращаемых значений. он сказал, итераторы через ту же йобу работают
Rafael 🌵
orly?
А не, норм
Rafael 🌵
Просто лучше используйте умный указатель
Ned
и вообще, это deprecated фишка для тех кто любит [][]
🦥Alex Fails
class row{ private: Matrix<T> \*const parent; T \*const prow; public: row(Matrix<T> \*const _parent, T \*const _prow); ~row(); T& operator [](const int y); const T& operator [](const int y) const; };
Ned
Просто лучше используйте умный указатель
я пока не дорос до такого , пишу ещё велосипеды:(
Ned
ничего, я сделяю
Dumitru
Кстати а зачем возвращать ref ? Современный с++ вроде очень оптимально возвращает значение
Rafael 🌵
Просто почитай сначала про rvalue ссылки, потом про move семантику, потом про умные указатели
Rafael 🌵
И про RAII не забудь
Ned
у меня это отложено сразу после исключений. вторым делом) спасибо
Dumitru
Умные указатели очень крутые! Главное не увлечься ) я как-то попался
Dumitru
где?
Я к сообщению Алекса
Rafael 🌵
А зачем классы внутри класса?
Ned
А зачем классы внутри класса?
для корректной работы пары операторов A[x][y]
🦥Alex Fails
А зачем классы внутри класса?
Чтобы не засерать глобал неймспейс
Rafael 🌵
Чтобы не засерать глобал неймспейс
Там можно же юзать кастомный namespace
Dumitru
А зачем классы внутри класса?
Область видимости я думаю
Ned
ибо вспомогательные, да. тем паче, приват
Dumitru
Там можно же юзать кастомный namespace
Проще же внутрь запихнуть)
Rafael 🌵
Проще же внутрь запихнуть)
Просто первый раз такое вижу, не обсессудте
Ned
такое гораздо проще, потому что у row есть поле T*, где Т - параметр шаблона. было бы тяжко обходить этот вопрос, я уже думал на эту тему
Rafael 🌵
Кстати о шаблонах
Rafael 🌵
Почему ты юзаешь class T, а не typename T
Rafael 🌵
?
Dumitru
Вроде одно и тоже
🦥Alex Fails
const T getElem(const int x, const int y) const; а чо не const T &getElem(const int x, const int y) const;
🦥Alex Fails
Почему ты юзаешь class T, а не typename T
похер как. Зато это на старых компилях пашет
Ned
Почему ты юзаешь class T, а не typename T
одно и то же и Алёна пишет, что тайпнейм нужен именно тогда, когда надо указать, что дело - тип. я там ниже юзаю тайпнеймы когда throw
Rafael 🌵
Вроде одно и тоже
насколько я помню тайпнаме использует когда мы хотим показать, что это строенные классы типо инт, дабл и прочее, а класс, когда юзаем кастомные классы
Ned
const T getElem(const int x, const int y) const; а чо не const T &getElem(const int x, const int y) const;
1)тогда метод не может быть конст 2)Т - арифметический тип, нет смысла передавать ссылку в этом случае
🦥Alex Fails
Почему не может?
Dumitru