• Что подразумевается под strong knowledge С++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Но вот что вообще определяет уверенное знания С++. То есть, что именно для этого нужно знать?

    Это очень просто: нужно уметь прочитать любой фрагмент кода на C++ и понять его.
    Открывайте С++ исходники наугад и читайте любую функцию. Если вы в состоянии сделать это много раз подряд с разными проектами -- скорее всего вы уверенно знаете С++.
    Ответ написан
    4 комментария
  • Выбор типа переменной класса в зависимости от параметра шаблона (C++17, if constexpr)?

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

    Суть такова. Нужно превратить значения типа перечисления в тип. Сделать мы это можем используя возможность указывать в качестве параметра шаблона значения перечислимых типов.

    Например:
    enum class AllowedTypes : uint8_t
    {
    	Int8	= 0,
    	Uint8,
    	Int16,
    	Uint16,
    };
    
    template< AllowedTypes TYPE >
    struct AllowedType;


    А для того, чтобы конкретное значение перечисления правильно переводилось в тип, шаблон "AllowedType" нужно специализировать.
    spoiler
    template<>
    struct AllowedType<AllowedTypes::Int8>
    {
    	using Type = int8_t;
    };
    
    template<>
    struct AllowedType<AllowedTypes::Uint8>
    {
    	using Type = uint8_t;
    };
    
    template<>
    struct AllowedType<AllowedTypes::Int16>
    {
    	using Type = int16_t;
    };
    
    template<>
    struct AllowedType<AllowedTypes::Uint16>
    {
    	using Type = uint16_t;
    };


    После этого достаточно использовать "typename AllowedType::Type" в нужном тебе месте.
    spoiler
    template< AllowedTypes TYPE >
    struct spi
    {
    	typename AllowedType<TYPE>::Type*	p_tx = nullptr;
    	
    	constexpr spi() {};
    };


    Вот пример работы:
    spoiler
    // Example program
    #include <typeinfo>
    #include <iostream>
    #include <string>
    #include <cstdint>
    
    enum class AllowedTypes : uint8_t
    {
    	Int8	= 0,
    	Uint8,
    	Int16,
    	Uint16,
    };
    
    template< AllowedTypes TYPE >
    struct AllowedType;
    
    template<>
    struct AllowedType<AllowedTypes::Int8>
    {
    	using Type = int8_t;
    };
    
    template<>
    struct AllowedType<AllowedTypes::Uint8>
    {
    	using Type = uint8_t;
    };
    
    template<>
    struct AllowedType<AllowedTypes::Int16>
    {
    	using Type = int16_t;
    };
    
    template<>
    struct AllowedType<AllowedTypes::Uint16>
    {
    	using Type = uint16_t;
    };
    
    template< AllowedTypes TYPE >
    using TypeFor = typename AllowedType<TYPE>::Type;
    
    
    template< AllowedTypes TYPE >
    struct spi
    {
    	TypeFor<TYPE>*	p_tx = nullptr;
    	
    	constexpr spi() {};
    };
    
    int main()
    {
    	spi<AllowedTypes::Int8> spi1;
    	std::cout << typeid( *spi1.p_tx ).name() << " " << sizeof( *spi1.p_tx ) << std::endl;
    	
    	spi<AllowedTypes::Uint16> spi2;
    	std::cout << typeid( *spi2.p_tx ).name() << " " << sizeof( *spi2.p_tx ) << std::endl;
    	
    	return 0;
    }

    cpp.sh/85p6
    Ответ написан
    2 комментария
  • Операционная система для умного дома на C++ c полного нуля. Как?

    GavriKos
    @GavriKos
    А почему арм и малина? Это ж несолидно. Делайте свои микроконтроллеры! Добывайте кремний, разрабатывайте схему. А там и свой ASM и ось подтянутся.
    Вот ваш вопрос примерно из той же категории, если что.
    Ответ написан
    Комментировать
  • Какой компилятор выбрать для C++?

    @vilgeforce
    Раздолбай и программист
    Visual Studio ставьте и не задавайтесь этим вопросом в ближайшие пару лет.
    Ответ написан
    6 комментариев
  • Как реализованы порталы в игре Portal?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Честные порталы делать очень сложно, нужно хорошо понимать физику и весь пайплайн рендера. Есть очень много граничных случаев, каждый из которых нужно отдельно поддерживать: портал внутри портала, пересечение границ внутреннего и внешнего портала, несколько внутренних порталов, повороты плоскости портала, перемещение предметов, тени и освещение, прозрачные материалы и т. п. Есть две основные техники реализации отрисовки порталов: через рендер текстуры и стенсильный буфер.

    Порталы на рендер текстурах делаются проще, но они дороже по производительности, даже на простой геометрии несколько порталов могут оказаться непосильной задачей для компьютера. Основной принцип следующий: когда вы смотрите на портал, на другой стороне портала камера рисует картинку в текстуру, эта текстура натягивается на плоскую геометрию, и со стороны кажется, будто бы через дырку видно другую часть сцены. Примитивную реализацию такой схемы можно собрать руками в редакторе, но дальше начинаются сложности. Если у конечного портала "за спиной" будет геометрия, она попадёт во вьюпорт камеры и будет странно смотреться. Чтобы это предотвратить нужно ближнюю плоскость отсечения у камеры сдвигать в плоскость портала с помощью CalculateObliqueMatrix. Для вычисления положения камеры и пересчёта матрицы есть удобный колбэк OnRenderObject. После корректировки матрицы порталы будут смотреться более-менее корректно, но будут всплывать всевозможные косяки при перемещении через плоскость портала из-за буфера глубины и nearClipPlane основной камеры.

    Стенсильные порталы будут работать сильно быстрее, но для их реализации нужно хорошо шарить в шейдерах. Расписывать их работу подробно не буду, в целом они делаются точно так же, только трюки с рендер текстурами заменяются на трюки с буферами, предлагаю лучше почитать пару полезных статей на тему: раз и два. В контексте юнити всё немного сложнее, чем на чистом OpenGL, потому что нет прямого доступа ко всем буферам и для получения похожего результата придётся немного поизвращаться. Потенциально облегчить задачу может низкоуровневое API, но у меня не получилось добиться хороших результатов без потери качества картинки. Я возлагаю большие надежды на ScriptableRenderLoop, если судить по документации, это как раз то, что нужно.

    Прошу заметить, что всё вышесказанное касается чисто графической части, для простейшего случая, когда мы имеем FPS камеру без анимаций, без дополнительных механик, которая просто ездит по уровню и может заглядывать в порталы. Что уж говорить про миллион потенциальных багов, если вы захотите включить рядом с порталом систему частиц или взять в руки кубик. Посему советую либо купить плагин и довольствоваться тем, что он умеет, либо приготовиться потратить несколько месяцев на разработку своей портальной системы. И в том и другом случае ограничения движка не позволят вам в разумные сроки получить Portal, в лучшем случае это будет Narbacular Drop.
    Ответ написан
    Комментировать
  • Как в C++ скрыть определение вспомогательных типов?

    @Johanga
    class MyStruct2; // forward declaraion
    class MyStruct1
    {
       MyStruct2 member;
    };


    можно интерфейс или pImpl
    Ответ написан
    Комментировать
  • Что должен знать Junior C++ программист на данный момент?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Все на свете, причем еще и зависит от рода деятельности. Можно не слишком глубоко, но в общих чертах знать куда идти, в случае чего. Из популярного - STL, WinAPI, COM, Boost, кое-где Qt. Увы, но порог вхождения там высок, да еще и необходимо "затачиваться" на конкретную вакансию. Ибо embedded, системное и прикладное программирование - это разные вещи, которые требуют различных знаний.

    Мне кажется, что в этой Спарте нет джуниоров, там сразу хорошие миддлы =)
    Ответ написан
    Комментировать
  • Как организовать хранение библиотек и хидеров от которых зависит наш проект?

    Vapaamies
    @Vapaamies
    Разработчик будущей ОС для ПК размером 250 МБ
    И чтобы хранилась история, чтобы мы могли взять версию своей библиотеки за прошлый год и быстро ее собрать со всеми зависимостями. Сейчас используем сетевую папку просто.

    В SVN есть такая штука, как svn:externals. В Git и Мercurial тоже наверняка есть, а вот в CVS вряд ли.

    Суть в том, что в вашем хранилище хранится ссылка на другое (внешнее) хранилище, и при развертывании рабочей копии клиент ходит по этим "символическим ссылкам" и рекурсивно по ним всё скачивает. В SVN подчиненные рабочие копии будут выглядеть как обычные, у них будет своя папка .svn.

    Нужно только, чтобы внешнее хранилище было такого же типа, как и ваше. Скажем, SVN не сможет скачать из внешнего Git. Если вы качаете библиотеки не из хранилищ, а просто архив с сайта, заведите у себя отдельное хранилище для библиотек и складывайте туда все нужные версии.
    Ответ написан
    Комментировать
  • Юридическое подтверждение взлома сервера?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    только к адвокату

    защищаться нужно не "как правильно по жизни", а "как правильно по юриспуденции"
    Ответ написан
    Комментировать
  • Можно ли возвращать лямбды?

    @MiiNiPaa
    Вот так делать - это нормально?
    Вполне

    И что в таком случае возвращается, указатель на функцию или сама функция?
    Функциональный объект. Лямбда — не функция, она может быть приведена к указателю на функцию в некоторых случаях.

    Если возвращается указатель, то где хранится сама функция, в куче или стеке?
    «Функция» лямбды хранится там же, где и остальной код. На лету ничего не собирается и не компилируется. Лямбда это синтаксический сахар для объявления класса с перегруженым оператором вызова функции.

    И еще один вопрос, по этой же теме:
    Это сокращенная запись вот такой конструкции:
    Или что то другое?
    lambda имеет уникальный тип. Это не функция (но может быть приведена к ней в данном случае).
    Ответ написан
    Комментировать
  • Python. От теории к практике?

    @alexandershelupinin
    Самый простой способ чтобы структурировать сумбур в голове - начать делать реальные практические проекты, тогда результат (работает/неработает) тебе точно скажет, понял-ли ты тот или иной материал по python.
    Самый простой способ начать делать проекты - начать делать то что тебе интересно и что в теории может принести некоторые деньги (это чтобы всегда была мотивация допилить до конца).
    Самый реалистичный подход - начать либо с малых проектов, либо со сложного проекта который структурно можно разбить на множество малых, таких малых что интересны и полезны сами по себе.
    Просто как пример из моей жизни - можно попробовать раскрутить twitter/instagram/fb/vk аккаунт путем автоматизации всего и вся, включая поиск/парсинг/постинг контента, поиск/добавление/лайкание друзей и т.д. Вот например автоматизировал все задачи по раскрутке https://twitter.com/jokeforeveryone , у твиттера простой API и куча модулей под питон, например tweepy, twithon .
    Ответ написан
    Комментировать
  • Чем может быть полезен C++ веб разработчику?

    Adamos
    @Adamos
    Я бы посоветовал, если уж хочется общего развития, действительно познакомиться с С или Ассемблером (неглубоко - ровно настолько, чтобы понять, как программистские конструкции доходят до реального "железа").
    А для работы - не нахватываться языков, да побольше, а погрузиться в один из них всерьез. Написать свою библиотеку на js. Или высоконагруженный проект на go. Так, чтобы прочувствовать язык и получить от него удовольствие, делая сложные вещи просто и естественно.
    То есть - побольше руками и головой. А за статьи, хабр и прочее хвататься только тогда, когда не будет хватать информации. Читать - легко...
    Ответ написан
    2 комментария
  • Чем плохи комментарии на русском языке в коде?

    donkaban
    @donkaban
    Умею рисовать тени
    Тупой вопрос.
    Теперь чуть подробнее.
    1. Вы знаете английский, в силу профессии
    2. Любой, кто откроет ваш код - знает английский в силу профессии
    3. Любой, кто откроет ваш код по делу - знает английский в силу профессии.
    4. Предполагать, что то, кто откроет ваш код по делу (включая вас) знает не только английский (в силу профессии), а еще и русский (по праву рождения, наследования или от лишней дури) - избыточно.
    5. Предполагается, что вы, в силу професси не совершаете избыточных (а оттого - лишних) телодвижений.

    Достаточно спросить себя, а отчего я не пишу комментарии на грузинском, нигерийском или наречии 'кок', так распространенном к востоку от великой стены, которую северные варвары называют "китайской"?
    Ответ написан
    7 комментариев
  • Чем плохи комментарии на русском языке в коде?

    @skvot
    1. Комментарий на русском автоматически повышает порог входа в проект для людей, не знающих этот язык.
    2. Визуальная "каша" - код на английском, комментарии на русском.
    3. Кодировки и все из этого вытекающее.
    Ответ написан
  • Как правильно развиваться в программировании?

    zolt85
    @zolt85
    Программист
    Конкретно:
    Идете на github
    Находите проект "по душе", разбираетесь в нем
    Смотрите список открытых issue по проекту, если видите что можете что-то сделать - делайте.

    Абстрактно:
    Развиваться в программировании возможно только через непрерывную практику. Чем больше будете практиковаться, тем быстрее поймете, что Вы ничего не знаете о программировании, и сие осознание будет толкать Вас на изучение новых приемов и практик. И так всю жизнь.
    Ответ написан
    Комментировать
  • Как определить бездействие компьютера?

    GavriKos
    @GavriKos
    У вас в вопросе две сущности - бездействие юзера и бездействие компа. Бездействие юзера определяется активностью мышки/клавиатуры +детекция фулскрина (фильм смотрит).

    Компьютер сам по себе никогда не бездействует. В фоне может работать индексация диска, дефрагментация, антивирусы могут свою активность увеличить и прочее. Если у вас привязка только к 1с - детектите именно ее активность, и все.
    Ответ написан
    Комментировать
  • А где вы берете иконки?

    Ответ написан
    Комментировать
  • Где найти напарника, что бы учиться кодить?

    @DancingOnWater
    Я бы помог, но ночью я сплю.
    Ответ написан
    Комментировать
  • Winapi, чужое приложение - проблемы с меню и окна отрисовываются только при наведении мыши?

    @Sumor
    Ответ на 4 вопрос:
    Когда деревья были маленькими, а Windows только появилась, то была функция SetActiveWindow, которая делала выбранное окно активным — выбрасывало на первый план. Но программисты любили делать свои окна постоянно активными и вызывали эту функцию слишком часто, от этого иногда система уходила в карусель активных окон. Для предотвращения этого в API Windows появилась функция SetForegroundWindow, которая работает почти также, но в случае частых вызовов окна перестают переключаться, а только начинают мигать в панели задач. Это не особенность компьютеров или программ — это внутренняя кухня. Если система решит, что вы слишком часто переключаетесь - она начнёт просто мигать кнопками.
    Ответ на 3 вопрос:
    Ожидание появление окна — в цикле, по таймеру. Ничего в этом страшного нет. При желании это можно организовать в отдельном потоке.
    Помимо этого есть сложные методы внедрения кода в программу, связанные с хуками приложения или перехватом вызовов функций, но не думаю что ваша задача требует такого сложного вмешательства.
    Ответ на 2 вопрос:
    Видимо у программы так реализован цикл событий, что ваш SendMessage не обработается, пока не придут настоящие события - MOUSE_MOVE, например. Или для диалога нужно текущее активное окно. Или ещё много других подобных причин. Может перед SendMessage должно прийти другое событие.
    В большинстве случаев для имитации действий нужно чтобы окно было активным. Если окно не активное, то имитация в равной степени может работать или не работать.
    Ответ на 1 вопрос:
    Скорее всего меню динамические и создаются по щелчкам мыши и открытию меню. Поэтому вам ничего не остаётся как последовательно имитировать нажатие на меню File, пробег по пунктам меню, и выбор нужного пункта меню — чтобы отработали внутренние механизмы создания подменю.
    Ответ написан
    1 комментарий