Задать вопрос
  • Как реализовать равномерный генератор случайных чисел на с++?

    @MarkusD Куратор тега C++
    lukepker , а в чем состоит проблема использования генераторов стандартной библиотеки?
  • FREEGLUT error codeblocks c++ (No such file or directory)?

    @MarkusD Куратор тега C++
    maks_cpp , обрати внимание на П3.2, П3.6 и П3.8 регламента работы сервиса.
    Увы, но предложения в стиле изложения на русском языке и английскими словами выглядят неинформативно.
  • Как ограничить ввод цифр на с++?

    @MarkusD Куратор тега C++
    pokanoobpython, если у тебя все работает и твой вопрос решен, то стоит отметить ответ как решение.
  • Как убрать большое количество "this->"?

    @MarkusD Куратор тега C++
    zRrr, вот именно с этого кода начинать и стоило.

    В шаблонизированных классах нужно явно указывать наследованные члены класса

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

    using Base<T>::var; - это операция создания псевдонима поля в локальной области видимости шаблона типа. И это не всегда удобно. И это приведет к проблемам если такое имя уже есть в локальной области шаблона типа или если ты это поле переименуешь в базовом шаблоне. А еще это снова будет сбивать тебя с толку, т.к. в месте работы с полем не будет понимания, откуда это поле взялось.
    Самый удобный и универсальный способ - это использование полной квалификации поля или метода при обращении.
    template <class T>
    class Derived : private Base<T>
    {
    public:
        using Parent = Base<T>;
        
        Derived() {
            Parent::a = 1;
            Parent::b = 2;
            Parent::c = 3;
        }
    };

    Такой код не будет тебя запутывать при чтении. Он явно покажет, откуда именно ты брал поля для работы этом месте.
  • Как убрать большое количество "this->"?

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

    @MarkusD Куратор тега C++
    IliaNeverov , т.е. тебе не достаточно прошлого комментария по твоему вопросу?
    conio.h не определяет нажатие клавиш на клавиатуре. Эта библиотека дает доступ к чтению потока ввода консоли, который может производиться не с клавиатуры, а из файла или вывода другой программы.
    У оконного приложения нет консоли и нет потоков ввода-вывода, conio.h даст доступ к тому, что не работает.

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

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

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

    @MarkusD Куратор тега C++
    kaktak255, отредактируй тогда свой вопрос с учетом соблюдения регламента и размести ссылку на репозиторий с кодом, который ты пытаешься собрать.
    Только так у тебя будут шансы получить нормальный ответ на свой вопрос.
  • Как загрузить объект класса из dll библиотеки?

    Kamikadze1024 , общим типом между библиотекой и основным кодом может быть только интерфейс.
    Фабричную функцию ты правильно придумал использовать, однако тебе нужно реализовать и функцию деструкции экземпляра, созданного фабричной функцией. Это потому что аллокатор внутри библиотеки может быть полностью другим и попытка удалить объект библиотеки из кода основного модуля с высокой вероятностью будет фатальной.
    В библиотеке твоя фабричная функция должна создавать экземпляр типа с экспортным интерфейсом. Основной же код сможет пользоваться исключительно виртуальными функциями принятого интерфейса.
  • Куда кидать скачанные библиотеки в mingw?

    @MarkusD Куратор тега C++
    kaktak255, прошу обратить повторное внимание на П3.8 регламента работы сервиса.
    Код в изображениях размещать запрещено. Допустимо - только в виде текста, под соответствующим тегом.

    нашел исходники , решил затестить

    Тебе стоило сразу указать на источник того кода, который ты собираешь.
  • Что делать если отсутствует библиотека SFML?

    @MarkusD Куратор тега C++
    kaktak255, в C++ есть только одна стандартная библиотека - это STL.
    Все остальные стандартными не являются. SFML - это сторонний открытый проект и никто не обязан включать его в свои поставки.
  • Почему ГПСЧ нужно инициализировать в main()?

    @MarkusD Куратор тега C++
    HoShik, потому что так работает ГПСЧ. Он не столько инициализируется, сколько принимает некоторое зерно [?], от которого начинает строить последовательность псевдо-случайных чисел.
    При установке зерна происходит сброс состояния генератора. Если ты в цикле постоянно устанавливаешь одно и то же зерно, ты в результате получаешь ровно одну и ту же цепочку псевдо-случайных чисел внутри каждой итерации цикла.

    Обрати внимание на то как работает функция time [?]. В системах, которые придерживаются спецификации POSIX, результат можно интерпретировать как количество секунд. Т.е. раз в секунду результат time( nullptr ) будет меняться. Именно это и видно в приведенном тобой листинге.
    Сумма массива под номером 9 равна 73
    Сумма массива под номером 10 равна 76

    9й еще был в одной секунде, а 10й - уже в следующей.
  • Правильное применение const?

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

    В наше время существует такой шуточный термин, как const nazi.
    В частности, Джон Кармак еще в 2013 году писал про себя: "I am a full const nazi nowadays, and I chide any programmer that doesn’t const every variable and parameter that can be."
    Лично я руководствуюсь подходом, при котором const играет большую роль в понимании кода читателем.
  • Как сделать связь между классами?

    m1kz , ты хочешь чтобы тебе в ответе код написали?
    Или тебе нужно чтобы тебе объяснили как сделать то, что тебе задано?
  • Откуда взялись дополнительные 4 байта?

    @MarkusD Куратор тега C++
    Eugene-123, не просто для этого, а прежде всего для того чтобы получить правильно выравненный адрес на конец экземпляра.
    Это качество размера сильно упрощает процессы подсчета размера и смещения, например, в стеке. Когда у тебя все размеры типов сформированы с учетом выравнивания, получение правильного адреса начала следующего экземпляра иного типа с учетом его, потенциально другого, собственного выравнивания может быть выполнено всего за одну операцию.
  • Откуда взялись дополнительные 4 байта?

    @MarkusD Куратор тега C++
    Eugene-123 , в типе Something первые 8 байт отданы на vtable, следующие 4 байта - на int some_field. Там без padding-а, все верно. Итого получается 12 байт.
    Выравнивание типа Something равно 8 байт, т.к. в его составе есть указатель vtable.
    Размер полей в 12 байт не кратен выравниванию на 8 байт, поэтому размер типа выводится как 16 байт.
    Дело в том, что размер типа всегда должен быть кратен выравниванию типа.
  • Как вернуть разные типы из std::function?

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

    Лямбда - это тоже функция со своей сигнатурой и строгим типом. Вольность C++11 для лямбды позволяет определять тип возвращаемого значения по первому встреченному return в ее теле. Все прочие return обязаны в таком случае возвращать значение точно того же типа.
    Если специфицировать тип возвращаемого лямбдой значения используя TRT[?], то все возвращаемые из лямбды значения будут автоматически приводиться к указанному типу.
    Вот пример для наглядности.

    Вольность C++17 позволяет инстанцировать шаблоны типов на основании параметров конструктора шаблонного типа. Эта вольность вводит тебя в заблуждение когда ты пишешь std::function func{ ... };.
    В C++ все должно быть строго определено. C++17 просто позволяет часть этой строгости переложить с твоих плеч на плечи транслятора. Тебе же, в целях обучения, лучше взять все обеспечение строгости определений полностью на себя.
    В своем коде ты должен написать максимально конкретный и максимально понятный для тебя текст:
    std::function<Y ( int )> func{
    	[]( int z ) -> Y
    	{
    		if( z > 0 )
    		{
    			return X{};
    		}
    		
    		return Y{};
    	}
    };

    Только в этом случае и ты свой текст поймешь, и транслятор его тоже поймет так же, как и ты понимаешь.
  • Как вернуть разные типы из std::function?

    @MarkusD Куратор тега C++
    impressive17 , это нерабочий код. Он не пройдет трансляцию потому что тип значения нижнего return отличается от типа значения верхнего return.
    Это явно не тот код, который ты используешь. Или ты пока еще просто не в курсе что этот код не сходится со стандартом.
    Каким транслятором этот код собирается?
  • Как вернуть разные типы из std::function?

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