Задать вопрос
  • Как подключить библиотекту к проекту Qt Creator?

    @MarkusD Куратор тега C++
    Egorithm, книга с драконом - это для глубокго изучения вопроса. Не, сейчас ради обретения фундамента будет достаточно некоторых статей. Например с хабра: [1], [2], [3], [4], [5], [6]. Или с SO: [1].

    Шаблоны стека и очереди у тебя уже есть, их можно не делать. Но вот бинарное дерево операций сделать надо. И сами операции тоже. Думай о константе, как о унарной операции, которая всегда возвращает одно значение. О переменной можно думать как о унарной операции, которая возвращает значение из внешней памяти, которая будет доступна в момент исполнения.

    В целом, да, ты прав. Сейчас легче будет начать именно с этапа реализации АСТ формулы в виде бинарного дерева операций. На этом этапе ты уже сможешь выполнять АСТ как функцию чтобы сформировать значения для графика.
  • Как подключить библиотекту к проекту Qt Creator?

    @MarkusD Куратор тега C++
    Egorithm, да, разбор мат. выражений и его перевод в дерево операций с помощью обратной польской нотации - задача тривиальная и посильная для самостоятельной реализации студентом. Почитай теорию трансляторов, это очень интересная и простая тема.
    В этом моем проекте даже виртуального процессора нет, там AST напрямую выполняется. Для тебя это сейчас - самое удобное и эффективное решение. Вот точное место, где производится разбор выражений. Вот как выглядит дерево операций. Это просто бинарное дерево.
  • Как подключить библиотекту к проекту Qt Creator?

    @MarkusD Куратор тега C++
    Как подкючить библиотеку [muParser] к Qt?
    Как собрать библиотеку .lib [muParser]?
    Как подключить стороннюю библиотеку к проекту Qt через CMake?
    Как устранить проблему с подключением библиотеки?
    Какой парсер для математических выражений на Qt посоветуете?
    Зачем так много дублей одного вопроса? На этот вопрос нет ответов во всех дублях потому что заниматься им нужно тебе.

    Есть ли в Boost парсер математических выражений?
    Да, давай еще буст попробуем прикрутить к задаче, реальная сложность которой измеряется в нескольких часах работы.

    Я для одного хорошего друга такую задачу на паскале решил за один день. Разбор математических выражений - одна из тривиальных задач, что там были решены. Изучи и реализуй собственным кодом, потрать следующие три дня на обретение знаний.
  • Почему ругается Visual Studio c++?

    @MarkusD Куратор тега C++
    res2001 , дело в том, что этот код не является стандартным для C++.
    Вот правило объявления массивов постоянной длины.
    А вот как понимается constant-expression. const под это понимание не попадает по определению.

    Но! Если попросить компилятор сделать глубокую оптимизацию, он обязательно усмотрит в каком-нибудь const local намеки на constant-expression и проведет оптимизацию. Компиляторы всегда работают по-разному. Просто компиляторы - разные.
  • Почему ругается Visual Studio c++?

    @MarkusD Куратор тега C++
    Terminator123321 , прошу обратить внимание на п3.8 правил, которые ты в обязательном порядке внимательно прочитал перед публикацией своего первого вопроса.
    Код запрещается публиковать в виде изображения.
  • Найти кратчайший путь?

    Это - задача Коммивояжера.
    Решается через понимание алгоритма Дейкстры и A* с его модификациями.

    А за кодом добро пожаловать на freelance.habr.com.
  • В чем заключается ошибка?

    @MarkusD Куратор тега C++
    Евгений Иванович,
    Запускает поток на выполнение асинхронно с основным потоком я полагаю.

    Это не так.
    Тебе надо изучить документацию к этому методу. При работе с кодом у тебя нет права предполагать. Ты можешь только опираться на документацию используемых тобой инструментов.
    Объект потока является перемещаемым, но не копируемым. Это тоже изложено в документации. Об этом тебе компилятор и говорит. Перемести объект в конструируемую пару и трансляция кода пройдет успешно. detach у тебя лишний во всех возможных смыслах. Поток целевой платформы запускается сразу в конструкторе объекта потока. После перемещения в пару th будет пустым, а th.detach() ничего не сделает.

    Не стоит пробовать играть в демагогию с правилами, это может заметить Модератор . Ты текст ошибки всегда можешь достать из логов сборки проекта, а твои картинки изобилуют визуальным мусором и артефактами компрессии. В правилах все предельно ясно изложено.
  • В чем заключается ошибка?

    @MarkusD Куратор тега C++
    Евгений Иванович, да нет, картинки мутные. Все. Прошу принять во внимание П3.8 правил, в котором запрещается размещать фрагменты кода в виде картинок.

    Смысл, как мне казалось, в том что бы создать поток, запустить его и сохранить в map.

    Это смысл строчки th.detach()? Я спрашиваю про смысловую нагрузку только одной этой строчки.
  • В чем заключается ошибка?

    @MarkusD Куратор тега C++
    Евгений Иванович, нужен текст ошибки, а не мутные картинки.
    Зачем ты делаешь th.detach(), какую смысловую нагрузку несет конкретно эта строчка во всем твоем механизме?
    У std::threadнет конструктора копирования. А ты в коде пытаешься его копировать.
    std::thread th(b, data.data) - std::function тоже лучше бы перемещать.
  • Проектирование и архитектура приложений?

    Кирилл Горелов, ссылки, да, правильные. Просто думай о примитиве проектирования как о идее, а не как о коде. Идею в коде можно изложить по-разному.

    class ExceptionEnvelope(object):
    	def __init__(self, exception):
    		self.data = exception
    		self.type = type(exception).__name__
    		self.source = ...


    class ExceptionDispatcher(object):
    	...
    	def dispatch(self, exception):
    		envelope = envelope_factory.produce(exception)
    		mailbox_registry.visit(lambda mailbox: mailbox.try_accept(envelope))


    Код, как я предполагаю, у каждой сущности получается очень простой. Просто сущностей довольно много и у них не самые простые связи.
  • Поиск и замена текста на указанный?

    @MarkusD Куратор тега C++
    https://freelance.habr.com/
    Там тебе точно помогут при такой постановке вопроса.
  • Проектирование и архитектура приложений?

    Думаю, еще стоит дать пояснение по поводу применения конверта. В GoF конверт и мост - это один примитив проектирования. Но на деле любой примитив - это инструмент, которым можно пользоваться по-разному.

    Суть применения конверта в том, чтобы содержать что-то внутри, но давать прозрачный и понятный набор данных для идентификации того, что внутри. Для конверта с исключением на конверте может быть написано имя типа исключения, модуль, где исключение возникло, общий код ошибки. Т.е. все что нужно для ответа на вопрос: тебе этот конверт адресуется или не тебе.
    Если тебе, то ты уже открываешь его содержимое и получаешь исключение.
  • Проектирование и архитектура приложений?

    Кирилл Горелов, сервис локатор предлагаю сделать только если нужно. Если диспетчеров нужно несколько, я для них предлагаю завести сервис локатор.

    Я бы не сказал что вся магия творится в диспетчере. Это может прозвучать как будто диспетчер - это god object, который делает буквально все. В моем предложении диспетчер выполняет очень маленькую функцию. Но для читателя кода, на этапе передачи исключения диспетчеру все и заканчивается. Дальше считается что отчет об исключении отослан.

    Примитив диспетчера отличается тем, что не делает, а только перенаправляет в правильный канал.
    Внутри у диспетчера может лежать фабрика конвертов и реестр почтовых ящиков. Вот все инструменты, что ему нужны для работы.
    Диспетчеру дают исключение и говорят: "Направь адресату". Он толкает исключение в фабрику, получает от фабрики конверт и посещает все почтовые ящики в своем реестре с этим конвертом.
    Тут перенаправление в правильный канал получается за счет посещения почтовых ящиков.
  • Хранение настроек IOT железа. Что взять за идею или библиотеку?

    @MarkusD Куратор тега C++
    Александр Воронин , для начала давай убедимся что C тебе действительно нужен.
    И для AVR, и для STM, и для ESP уже давно есть компиляторы языка C++ даже с поддержкой C++17.
    Какие у тебя есть веские доводы оставлять совместимость своего кода с каким-либо стандартом C?
  • Проектирование и архитектура приложений?

    Кирилл Горелов, да, по поводу исключений у меня тоже мысли есть. На самом деле у тебя задача шире чем ты сейчас ее определяешь. Ты ведь пока не пишешь о том, как хотел бы конфигурировать работу с исключениями. А ведь на бою довольно распространен всякий батчинг и агрегация, с ротацией и подавлением дублирования. Плюс, еще на бою часто нужно управлять рассылкой информации о сбоях: одним слать что-то одно, другим другое, третьим - все вообще, но раз в час и только на почту.
    Поэтому над подходом стоит поразмыслить чуточку шире, чем сейчас. А в таком случае рисуется целая отдельная обобщенная подсистема, которую не так просто изложить в словах.
  • Как переделать код без функции?

    @MarkusD Куратор тега C++
    Кирилл Игнатьев , ты лучше расскажи, почему ты думаешь что в твоем коде нет функции? :)
  • Проектирование и архитектура приложений?

    Кирилл Горелов , дай-ка я тебе сразу покажу бойлерплейт в твоем подходе.
    Logger.log('старт скрипта') - это что, каждую функцию так начинать и заканчивать?
    Logger.log('Нормально все прошло идем дальше') - это ты в каждом удобном месте писать хочешь?

    Так недолго и замучить себя нудным репитативом, а еще так очень легко размыть код алгоритма и код поддержки/обеспечения алгоритма. На питоне я бы тебе посоветовал использовать декоратор для автоматической вставки логов в начало и конец функции, а для трассировки этапов функции хорошо бы подошел контекстный менеджер.

    Посмотри как такие декораторы пишутся и как работают. Например так (мной не очень любимая форма), или вот так, что мне нравится больше. И про контекстные менеджеры тоже примеры есть.
    И исключения в таком стиле обрабатывать удобнее. Проверено.

    Безусловно, Logger.log прямо так брать и списывать не стоит, он тоже полезный и им тоже важно пользоваться. Но не для трассировки.
  • Как работают с git diff-ами 3d-ассетов в GameDev?

    Вадим Ремин, это смотря как представлена сцена и какие возможности по совместному редактированию есть у инструментов.
    Например, для Wakfu Online был сделан специальный редактор для совместного заполнения локации. При этом, локальные редакторы у дизайнеров являются простыми сетевыми клиентами к БД локаций. И этот инструмент действительно работает.
    В моем личном опыте есть реализация сцены в виде построчного json. Каждый элемент - одна строчка. Формат - текстовый. Конфликты, слияния и диффы делаются на ура. Проблем тоже нет, кроме проблемы расползания строчек по вертикали и общего размера файла.
    А с бинарными форматами все однозначно: пока один сотрудник его не положил на место, второй его взять не может.
  • Как исправить ошибку в qt?

    Владислав Молчанов , прошу обратить внимание на П3.1 и П3.8 правил.
    Тегов слишком много и они слабо связаны с сутью твоей проблемы, это похоже на тег-спам. Текст необходимо оформить в блоке <code>.
  • Восходящее преобразование массива производного класса к родительскому?

    @MarkusD Куратор тега C++
    BobJonstone, Mercury13, не стоит в этом месте использовать reinterpret_cast. Это выстрел себе в ногу.
    reinterpret_castработает очень коварно:
    Unlike static_cast, but like const_cast, the reinterpret_cast expression does not compile to any CPU instructions... It is purely a compile-time directive which instructs the compiler to treat expression as if it had the type new_type.


    Теперь, если твой тип является полиморфным, тем более если наследование множественное или виртуальное, ты в этом месте получаешь ремаппинг памяти, нарушение инварианта, ложную виртуальную таблицу и еще целый ворох тараканов, которые разбегутся по всей памяти процесса, куда нерадивое исполнение такой машины смерти только сможет дотянуться.
    static_cast - этого тут достаточно для работы. Этот каст приведет this к правильному указателю на объект родительского типа.