• Почему Config::search у меня возвращает мусор?

    @MarkusD Куратор тега C++
    mayton2019, собственно, да. И в плюсах такое поведение только приветствуется.
    В C++23 можно будет написать так: config.search_int("foo").and_then(lambda);. Код выходит довольно наглядный.
  • Как сократить код с подпрограмой?

    @MarkusD Куратор тега C++
    Mnsweet, если тебе не понятно написанное в ответе, значит мы в целом не понимаем друг друга. Для меня, как для профессионала, написанное в ответе полностью понятно и дает исчерпывающее решение твоего вопроса.
    Стало быть, суть непонимания сейчас сокрыта в тебе. Я хочу задать тебе несколько вопросов и понять твои ответы.

    int masivA(int* a) {
        int sA = 0;
      for (int i = 0; i < 20; i++)
      if(a[i]<0)	sA += a[i];
    
      return sA;
    }
    int masivB(int* b) {
      int sB = 0;
      for (int i = 0; i < 20; i++)
        if (b[i] < 0)	sB += b[i];
      
      return sB;
    }
    int masivC(int* c) {
      int s = 0;
      for (int i = 0; i < 20; i++)
        if (c[i] < 0)	s += c[i];
      
      return s;
    }

    Это разные функции? Чем они отличаются, если да? Что у них общего, если нет?
  • Как определить коллизию квадратов?

    Filipp42, я не возможно прав. Я прав. Как прав я и в том, что представление фигур в твоем собственном коде привязано только к твоему желанию выбрать это представление.
  • Как определить коллизию квадратов?

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

    @MarkusD Куратор тега C++
    Никита Савченко, дело не в том, можно ли что-то сказать или нельзя. Дело не в том, согласен ты с каким-то правилом или нет.
    Дело только в соблюдении тобой регламента работы сервиса. Не соблюдаешь регламент - остаешься при своем. Соблюдаешь регламент - находишь ответы и не только.
  • Как разбить код бота Discord на отдельные файлы?

    @MarkusD Куратор тега C++
    Никита Савченко , ты ведь вроде уже давно здесь, а с правилами все так же сложно.

    Здравствуйте

    П3.4 регламента работы сервиса.

    В сервере Discord по D++ сказали

    П2.2 регламента и, внезапно, П2.3 регламента работы сервиса.

    Здесь об этом D++ знает не больше полутора человек, один из которых - ты.
  • Почему разрешен upcast в RTTI?

    @MarkusD Куратор тега C++
    Qubc
    Но dynamic_cast их не запрещает.

    А ты пробовал проверять это утверждение? Точно ли не запрещает?

    Как конкретно работает dynamic_cast, в деталях?
  • Почему copy или back_inserter могут быть вызваны без указания пространства имён?

    @MarkusD Куратор тега C++
    Qubc, как бы, да. Не сами эти заголовки, т.к. они являются публичными и библиотечными. Заголовок вектора может включать части библиотеки итераторов и алгоритмов напрямую, т.к. там авторы знают что делают.
    Но так не всегда. В студии, например, ты словишь на этом коде ошибку. Это потому что такое поведение является тонкостью реализации. И на него просто нельзя завязываться.

    И вот теперь к твоему основному вопросу. Очевидно, copy и back_inserter являются шаблонами функций. Попробуй придумать такой случай, когда имя функции без пространства имен остается правильным. Этот вопрос посложнее будет, я тебе советую над ним хорошо подумать. Но если не вытягиваешь, просто скажи. Я ответ напишу чуть позже.
  • Почему copy или back_inserter могут быть вызваны без указания пространства имён?

    @MarkusD Куратор тега C++
    Qubc, а вот, например, тебя не удивляет то, что трансляция твоего кода не отваливается на отсутствии заголовков algorithm и iterator?
    Попробуй придумать оправдание такому поведению транслятора.
  • Как сохранить значения нескольких переменных в С++ 17?

    @MarkusD Куратор тега C++
    Никита Савченко, ну хорошо.
    В общем, нельзя так в JS делать. return x, y, z; в JS сделает return z;, равно как и в C++.
    Операция следования, которую выполняет оператор ,, делает последовательное вычисление выражений x, y и z, вернув результат вычисления z в качестве результата операции.

    Единственным хорошим вариантом вернуть несколько значений, что в JS, что в C++ и где-либо еще, будет только кортеж - std::tuple[?] в C++.
    Принимать такие значения удобнее всего ни чем иным, как через структурное связывание. Если правильно организуешь возвращающую кортеж функцию, то в дело включится NRVO и весь кортеж будет оптимизирован до инициализации структурного связывания прямо внутри функции.
  • Как сохранить значения нескольких переменных в С++ 17?

    @MarkusD Куратор тега C++
    Никита Савченко, так. Ты сейчас показал два никак не связанных между собой участка кода.
    А я от тебя ожидаю от тебя последовательности в изложении.

    Вот ты показал код return x, y, z;, этот код явно написан в какой-то функции. Я хочу увидеть код вызова этой функции, в котором эти x, y, z каким-то образом сохраняются.
  • Как сохранить значения нескольких переменных в С++ 17?

    @MarkusD Куратор тега C++
    Никита Савченко, ну вот я об этом. У этого конструкта есть свое название. Я просто сам его писать не хочу, хочу чтобы ты это сделал.
    И еще интересно увидеть то, как в JS такое множественное значение принимается в месте вызова функции.
  • Как сохранить значения нескольких переменных в С++ 17?

    @MarkusD Куратор тега C++
    Никита Савченко , давай снова попробуем порассуждать.
    У тебя есть функция, из которой нужно вернуть несколько значений.
    Вектор - это динамическая структура. Он позволяет хранить произвольное количество однотипных значений.
    Но у тебя-то в функции количество значений известно. И значения из функции можно ведь вернуть разных типов.

    Раз речь зашла о JS, то как там из функции возвращается несколько значений?
  • Как можно усложнить программу?

    @MarkusD Куратор тега C++
    Xyyax1337, нет не нужно. Перепиши этот код сам, пойми алгоритм, реши задание своими силами.
    Ты чего конкретно этим своим действием хочешь добиться?
  • Как сохранить и получить потом шаблонный тип, переданный методу класса?

    @MarkusD Куратор тега C++
    toster_bodnar
    Не думал, что в вашем сообществе так всех раздражает слово "привет"

    Плевать под ноги прохожим - нормально? Не отталкивает от нормального общения? Курить в лицо беременной женщине на остановке - это нормально? Последствий не возымеет? В доску бухой мужик, слоняющийся по парку и пристающий к людям - это, я так понимаю, тоже нормально? Ну ничего такого же, верно? Может быть и разбой с бандитизмом - это нормально?
    Или все-таки это все не нормально?

    В любом сообществе существуют правила. И правила принято соблюдать. Вот что является нормальным.
    Нарушая принятые в обществе правила, ты бросаешь обществу вызов - т.е. ведешь себя вызывающе. Раздражает именно вызывающее поведение, а не что-то конкретное. Ты систематически нарушаешь правила и с каждым разом недовольство твоими действиями становится только больше. Знать и соблюдать правила обязан каждый участник.
    Ты - не исключение.

    А решение ты выбрал верное. Единственно верное в твоем случае. Тебе достаточно было просто самостоятельно разобраться с документацией языка или найти что-то похожее на SO.
  • Как сохранить и получить потом шаблонный тип, переданный методу класса?

    @MarkusD Куратор тега C++
    toster_bodnar, вот честно, если бы ты позаботился о соблюдении правил (П3.4, П3.6), то у тебя уже было бы качественное и быстрое решение вопроса.
    Но правила ты решил не соблюдать и решения у тебя нет.
  • Всё, что нужно знать о разработке собственной игры и где найти команду?

    zeatee0, и вот смотри. Это не для того чтобы тебя отговорить делать то что тебе хочется.
    Но у меня знакомые 3-5млн вкладывают в свой дом и свою землю. И им этого не хватает. А ведь свой дом - это куда более осязаемая инвестиция. Детям достанется, наконец.
    У игры же есть высокий шанс не отбиться потому что она не найдет свою целевую аудиторию.
    Я это пишу для того чтобы у тебя была картина геймдева и с этой стороны тоже.
  • Всё, что нужно знать о разработке собственной игры и где найти команду?

    zeatee0, нет. Этого хватит примерно на месяц-полтора работы.
    W&M - это очень глубокий с т.з. технологий проект. Он только выглядит простым, внутри все очень и очень сложно.
    За год-полтора, даже используя уже готовые инструменты, можно будет собрать только MVP подобного проекта без каких-либо намеков на окупаемость. Это будет просто внутренний прототип. А ведь за готовые инструменты, вроде Unity, Spine, PH и прочего-прочего еще надо отвалить немалые деньги. Пиратское использовать просто нельзя.
    Плюс люди. Непрофессионалы или люди не из отрасли наваяют такого, что дальше MVP этот проект и не двинется.
    А профессионалы стоят дорого. Закладывать стоит, как минимум, по 3-4млн в месяц, минимально года на три-четыре.
    Это будет около 200млн просто чтобы было что загрузить в магазин. Реклама еще около 100млн для нашего рынка. Если не для нашего, то будет уже около 100млн зеленых, как минимум.
    Я знаю один проект, который уже 8 лет пилится группой из 22 человек. Там расходов на полярда рублей в месяц уходит, а они еще ни копейки не заработали.

    Обходные пути есть, чтобы не тратить такие дикие для частника деньги. Но все обходные пути сразу подразумевают у тебя глубокую экспертизу в разработке игр. Именно поэтому проекты вроде Loop Hero и Gedonia появляются не как грибы после дождя, а единицами за года.

    И нет. Про ярды зелени я не перегнул. Потому что я там выше прикинул по самому минимуму. Половину сметы, а то и больше, съедает инфраструктура и ее поддержка. Сервера сборки, сервера тестирования, инструменты сборки и мониторинга, системы контроля качества, инструменты поддержки разработки и - самое сложное - интеграционная среда. Это все нужно даже для юньки и анриала.
    Бюджет одной игры раздувается до безобразия, чуть только подумаешь о том чтобы разработка игры была удобной и надежной.
  • Какой метод сжатия текстур подходит для моего случая?

    Карлиндоу Мэрлифи
    под мобилки

    DXT сразу из чата вышел.

    Может надо ещё на другие моменты смотреть?

    Надо. "Под мобилки" - это все равно что ничего не сказать.
    Какие у тебя целевые платформы? Если сразу и iOs, и Android, и Fuchsia, и Switch со Steam Deck и Razer Edge, то вести у меня для тебя печальные будут.
    Опираться нужно на используемые архитектуры процессоров в целевых платформах, на используемые ОС в платформах, на показатели общей производительности целевых устройств целевых платформ.
  • Почему переопределение метода без virtual -- это не переопределение?

    @MarkusD Куратор тега C++
    Изначальный метод все еще можно вызвать у объекта класса (если привести тип).

    Или если использовать полную квалификацию имени. :)
    Мой ответ про квалификацию имен.

    Daniel~, твой вопрос именно про квалификацию и разрешение имен в целом.