Ответы пользователя по тегу C++
  • Возможно ли как-то БД 1С интегрировать в Qt?

    Nipheris
    @Nipheris Куратор тега C++
    Если 1C хранит данные в SQL, то в общем-то проблем нет, надо только выяснить какая СУБД используется.
    Если 1C хранит данные в sdf-ках, то в принципе тоже можно, но я бы не стал открыть этот ящик Пандоры.
    Ответ написан
    2 комментария
  • Как создать копию объекта по указателю?

    Nipheris
    @Nipheris Куратор тега C++
    Для получения копии объекта его же средствами, необходимо вызвать конструктор копирования, если таковой определен:
    T *src = .... ;
    T *dst = new T(*src);

    Если конструктор копирования не определен, то копировать объект придется вручную.
    Ответ написан
  • Нужен ли сейчас Си?

    Nipheris
    @Nipheris Куратор тега C++
    Си как язык и экосистема, безусловно, нужны много где. Вопрос в том, нужны ли ВЫ этой экосистеме. Любой специались ценен не только знанием языка, но еще и знанием экосистемы и, самое главное, умением решать задачи, где вышеуказанный язык даёт наибольшую эффектиновсть с точки зрения бизнеса.
    Мало кому сегодня нужен человек, знающий PHP, но не знающий ничего о веб-разработке. С Си (да и с C++) то же самое. Чтобы вам давали те задачи, для решения которых имеет смысл использовать именно Си, вам нужно расти как специалист и в других областях. Например, хорошо разбираться в структурах данных. В управлении памятью. В машинной арифметике.
    Сравните например, человека, который просто знает, что в языке Си есть тип float, и человека, которому известно, что в Сишный float не запишешь значение 0.13, не потеряв в точности. А также человека, который понимает, почему точность теряется. И еще человека, который знает, что можно предпринять, если все-таки нужно как-то оперировать с десятичными дробями без потери точности.

    Этот ответ должен вас мотивировать на рост как IT-специалиста в целом, уделяющего дополнительное внимание принципам работы вычислительной техники и различным низкоуровневым вещам.
    Ответ написан
    2 комментария
  • Как сгенерировать CMakeList.txt?

    Nipheris
    @Nipheris Куратор тега C++
    Вообще CMake-файлы пишутся руками. Генерируются потом проекты/билд-файлы для конкретных тулчейнов. Возможно есть какие-либо конвертеры в CMakeLists.txt, но я не уверен, что они дадут вам хороший результат. Если проектом заниматься собираетесь серьезно, лучше самому разобраться.
    Да, для CLion наличие CMakeLists критично, эта IDE очень тесно интегрирована с CMake и в этом одна из ее киллер-фич. Поэтому, если нет возможности/желания/времени переводить проект на CMake (или вы просто не можете на это повлиять), то либо сами пишите CMake-скрипты лично для себя, либо пользуйтесь другой IDE/редактором. Более конкретные советы сложно дать, не зная проекта и задач, которые вы собираетесь в нем решать.
    Ответ написан
    3 комментария
  • Какую книгу лучше взять для изучение программы visual studio?

    Nipheris
    @Nipheris Куратор тега C++
    Для "изучения" вещей, таких как IDE, в которых и изучать то нечего, есть официальная документация. Официальная документация к продуктам Microsoft, имеющих отношение к разработке ПО (VS, TFS, библиотеки и прочее), находится на специальном портале, называемом Microsoft Developer Network (MSDN).
    Ответ написан
    Комментировать
  • Как сделать Bind по аналогии с QtSignal?

    Nipheris
    @Nipheris Куратор тега C++
    std::placeholders
    btn->onClick = bind(&Player::play, this, std::placeholders::_1);
    Ответ написан
    1 комментарий
  • Как автоматизировать сборку программ (php компонент+soap+git+cmake+vc11+ftp)?

    Nipheris
    @Nipheris Куратор тега C++
    Если прога кроссплатформенная, то https://travis-ci.org/
    Вот мануалы для плюсовщиков: https://docs.travis-ci.com/user/languages/cpp . Можно запускать CMake. Бесплатно - только open-source проекты.
    Генерируется CMake файл

    Странное желание)
    Ответ написан
  • Неявное наследование private ?!?

    Nipheris
    @Nipheris Куратор тега C++
    Вы невнимательно читали про наследование (или читали в плохом источнике).

    Логически (т.е. с точки зрения самой идеи) наследование (причем, любое, public и другие) подразумевает, что реализация базового класса станет частью реализации дочернего. Приватные поля класса - это часть его реализации.

    Технически, наследование в C++ подразумевает наличие подобъекта базового класса в объекте класса-наследника. Т.е. у вас в каждый объект Two помимо его собственных полей (в вашем примере их нет) запихиваются все поля Base (и так с каждым базовым классом, если их несколько), по принципу матрешки. НЕВАЖНО, как указали уже в первом ответе, что вы не имеете к ним доступ из класса-наследника. Важно, что они есть, и методы класса Base могут ими спокойно пользоваться, чтобы выполнять свою работу.
    Ответ написан
    Комментировать
  • Как преобразовать 1 байт и 0,5 байта в 1,5 байта(Более подробно в описании)?

    Nipheris
    @Nipheris Куратор тега C++
    Я предполагаю нужно выделить 2 байта и записать туда их как-то.

    Вам нужно считать эти два байта как единое целое (например, если вы используете потики, то считать нужно в short int), либо, если это невозможно, то тогда считать байты по отдельности и объединить их в int16_t, как советует Denis Zagayevskiy . И в том и в другом случае вам нужно понимать, что такое порядок байт в записи числа. Когда вы поймете, что такое порядок байт, то поймете, в чем суть вашего вопроса. Следить за ним нужно, т.к. в файле этот порядок байт может быть одним (и он определяется форматом файла), а на вашей машине он, в теории может быть другим, и вам нужно это понимать, когда вы будете склеивать вам int16_t. Если вы не будете его склеивать, а будете считывать сразу в int16_t, то вам нужно сверить порядок байт на вашей архитектуре и в формате файла.

    И да, числа в современной выч. технике:
    а) хранятся в двоичной системе счисления - т.е. все, что вы видите в дебаггере или в вашей программе - это целиком зависит от того, как функция преобразования числа в строку (которую вы потом видите) выбирает символы для записи числа. В большистве таких функций можно указывать систему счисления. Напишите сами такую функцию,чтобы понять, о чем речь;
    б) их размер в памяти/регистрах процессора выровнен на размер байта (как правило это 8 бит). Байт - это квант адресации и обработки данных, поэтому говорить, что число занимает 0.5 байта не вполне корректно с практической точки зрения, т.к. байт занять можно только целиком.

    Т.к. про 0.5 байт вы упомянули скорее по ошибке, я думаю битовые поля вам не нужны.
    Ответ написан
    1 комментарий
  • Какие знания нужно иметь в C++ для перехода на приложения с GUI?

    Nipheris
    @Nipheris Куратор тега C++
    Нужны знания о том, как правильно пользоваться сторонними библиотеками (любыми), написанными на C/C++ - как их подключать в проект и как работать с их API так, чтобы не наломать дров. Для этого необходимо понимать управление памятью в C++, понимать что такое жизненный цикл объекта и еще некоторые мелочи (например, что не стоит выделять память в одном двоичном модуле, а высвобождать в другом).
    Ответ написан
    1 комментарий
  • Что написать на C++ для тренировки?

    Nipheris
    @Nipheris Куратор тега C++
    P.S.: убедительная просьба не предлагать написать консольные калькулятор, конвертер и прочую мелочь.


    Напишите не консольный, а с рисованием графиков. Да и к совету Александр Таратин насчет производной советую прислушаться. А если для вас это мелочь, найдите производную не численным, а символьным путем (как делает Maple, например). Много интересного ждет вас.
    Ответ написан
    Комментировать
  • OpenGl камера нужна помощь?

    Nipheris
    @Nipheris Куратор тега C++
    Во-первых, условимся, что в рамках вопроса не делаем различий между OpenGL и DirectX. Будем называть их "графическим API".
    Во-вторых, будем считать это графическое API низкоуровневым (т.е. таким, как OpenGL и DirectX). Графические движки, где есть понятие сцены и камеры не рассматриваем в принципе.

    Итак, с математикой вам все равно придется разбираться по книгам (ищите об операциях над матрицами и векторами), поэтому попробую подсказать с концептуальной точки зрения.
    Самая главная истина, которую вам сейчас нужно понять:

    Для графического API НИКАКОЙ КАМЕРЫ НЕ СУЩЕСТВУЕТ.

    Для графического API существуют только примитивы (треугольники, линии, точки), которые вы хотите нарисовать, состоящие из вершин с трехмерными координатами и набор математических преобразований, которые вы хотите выполнить над этими вершинами ПЕРЕД тем, как они начнут реально рисоваться на экране (т.е. перед их растеризацией). ВСЁ. Все, что для вас выглядит как движение/поворот объекта в игровом мире ("мировые преобразования"), и движение/поворот камеры ("видовые преобразования") - лишь результат того, что вектора, задающие вершины объекта (например, кубика) предварительно умножаются на нужную, рассчитанную вами матрицу.

    Лет 10-15 назад такая матрица отдавалась непосредственно графическому API через специальные вызовы (когда видяхи уже умели делать T&L https://en.wikipedia.org/wiki/GeForce_256 , но еще не умели шейдеры), сегодня умножение вектора на матрицу - всего лишь одно из множества различных преобразований, которые можно выполнить в векторном шейдере.

    Теперь читайте про то, как эти матрицы используются и рассчитываются. Когда поймете матчасть, гляньте библиотеку GLM (раз уж у вас указано C++ и OpenGL) - она поможет не делать вам рутинную работу.
    Ответ написан
    Комментировать
  • Причина бесконечного вывода несвязанных символов?

    Nipheris
    @Nipheris Куратор тега C++
    У вас полнейший ад в плане работы с памятью. Вообще непонятно зачем эта свистопляска с указателем на string и массивом, непонятно даже что вы хотите вернуть из функции поиска - указатель на string или на массив string. Так или иначе, и то и другое - локальные переменные, и пытаться работать с указателями на них после завершения работы функции - грубая ошибка (точнее, ошибка пытаться возвращать указатель на локальную переменную из фукнции и думать, что это будет работать).
    Укажите, что вы хотите сделать, т.к. сложно даже понять решаемую задачу (видимо, что-то где-то найти?).
    Ответ написан
    Комментировать
  • Какую выбрать среду для написания кода на С++?

    Nipheris
    @Nipheris Куратор тега C++
    > почему там все так заморочено?
    Вы бы говорили с точностью до наоборот, имея проект с около 10к файлов исходного кода, а в солюшене 70 проектов. Вы бы говорили "Спасибо, VS, хоть как-то помогла разобрать это все". Это проф. инструмент, к сожалению он не позиционирован для обучения. Это факт.

    Для обучения берите удобный редактор (Sublime?) и вызывайте компилятор руками (из ком. строки). Много чего поймете полезного (придется, иначе не получится ничего). Как include-директории передавать и всякое такое. Как задолбаетесь это делать - напишите sh-ник/bat-ник. А вот только потом вы и поймете, зачем вам Студия, и что она может/не может облегчить.
    Ответ написан
    9 комментариев
  • Какой язык выбрать под Backend высоконагруженного rest-сервиса?

    Nipheris
    @Nipheris Куратор тега C++
    забрать данный с БД, передать на клиент, получить запрос от клиента, выполнить несложную логику, сохранить в БД, передать ответ

    По вашему описанию БД должна быть узким местом. А если узлов с базой много, почему не размножить бэкенд-сервера?
    Ответ написан
    1 комментарий
  • Есть ли проекты на С++, исходники которых стоят внимания, а то есть проекты написаны качественно и там есть чему поучиться?

    Nipheris
    @Nipheris Куратор тега C++
    JSON Spirit (на гитхабе оригинала нету, только зеркала от других разработчиков)
    SOCI
    cpp-netlib
    Драйвер Монги для C++
    mapbox-gl-native

    По поводу сборки: сейчас в плюсах без CMake никуда. Если хотите собирать чужие проекты и разрабатывать свои - стоит познакомиться. Из перечисленного списка почти все умеют им собираться. В более старых проектах популярны autotools и классические make-файлы, еще можно встретить SConstruct.
    Ответ написан
    Комментировать
  • Как забиндить classmember handler для boost::asio?

    Nipheris
    @Nipheris Куратор тега C++
    99%, что удаленная функция - это конструктор копирования.
    По смыслу объекта сокета можно догадаться, что копировать его не стоит (т.к. так или иначе он представляет собой обертку над системным ресурсом). Раз его копировать не стоит, используйте указатель на сокет вместо самого сокета. Например, shared_ptr, вот как тут советуют: stackoverflow.com/questions/5425666/passing-around... .

    Вообще, привыкайте, что по значению сложные объекты передаются довольно редко (почти никогда), т.к. передача по значению противоречит сути этих объектов - существовать строго в том количестве, в котором их насоздавал программист.
    Ответ написан
    1 комментарий
  • Какая математика нужна системному программисту?

    Nipheris
    @Nipheris Куратор тега C++
    Любому программисту будет полезна дискретная математика. Системный программист тут особо не отличается (ему важнее алгоритмы и структуры данных).

    Глубокий матан нужен тем, кто занимается расчетами и моделированием. Ну или областями, где задействована физика, например реалистичной графикой.

    То, что математика полезна в целом, и "ум в порядок приводит", я думаю и так понятно.
    Ответ написан
    Комментировать
  • Как сделать экпортируемую dll функцию без хедера членом класса?

    Nipheris
    @Nipheris Куратор тега C++
    Совершенно верно Петр говорит, this в мешке не утаишь).

    Кроме того, если либа грузится через LoadLibrary, т.е. связывания на этапе компиляции нет, то и вызывать ее надо через указатель, а тогда без обертки соответствие между какой-либо функцией, объявленной в классе (пусть даже это будет статическая функция) и этим указателем не проставить в принципе, т.к. где-то должна произойти косвенная адресация и передача управления в DLL.
    Ответ написан
    Комментировать