Задать вопрос
  • Как исправить ошибку 'сбой при специализации функции-шаблона' (многопоточность)?

    @MarkusD Куратор тега C++
    CodeInside , как я понимаю, функция SuspendThread взята из WinAPI?
    Если так, то `native_handle()` у `std::thread` будет хранить HANDLE потока, приведенный к void*.
    Источник: https://msdn.microsoft.com/en-us/library/hh920601....

    Следовательно, nullptr там может лежать в двух случаях, которые по своей сути одинаковы:
    1- объект потока не был инициализирован;
    2- объект потока был отвязан от потока - thread.detach().

    В любом из этих случаев объект потока не связан с реальным потоком.
    Значит выход - пожалуй, detach надо делать в другое время. А может его и вовсе не стоит делать?
  • Microsoft visual c++ runtime error, как исправить?

    Проблема не в наличии библиотек, а в том, что твой сервер bluetooth по какой-то причине падает. Об этом тебе лучше спросить у разработчиков этого самого blutooth сервера.
  • Как исправить ошибку 'сбой при специализации функции-шаблона' (многопоточность)?

    @MarkusD Куратор тега C++
    Антон Жилин , источники всегда приветствуются. :)

    en.cppreference.com/w/cpp/language/lambda
    The capture-list is a comma-separated list of zero or more captures, optionally beginning with the capture-default. The only capture defaults are & (implicitly catch the odr-used automatic variables and *this by reference) and = (implicitly catch the odr-used automatic variables by copy and implicitly catch *this by reference if it is odr-used).

    Т.е. только в случае автозахвата. Там же, 8-м номером, написано все про 17й стандарт и захват по значению. Это все понятно.

    А разве можно сделать замыкание на *this в 11м/14м стандарте? О_о
    cpp.sh/2cxhl

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

    @MarkusD Куратор тега C++
    Антон Жилин :
    this захватывается по ссылке.

    Поправка... en.cppreference.com/w/cpp/language/lambda
    [this] captures the this pointer by value


    Замыкания для всех работают одинаково. :)
  • Есть ли в stl такой мьютекс, который можно разблокировать из другого потока?

    @MarkusD Куратор тега C++
    Sh0ttky , Вызов `wait()` по его семантике всегда ставит поток в очередь ожидания.
    В этом случае всегда нужно проверять условия и не вызывать `wait()` когда ему нет места.

    Скажем, пусть у тебя есть пул потоков и очереди сообщений. Каждый поток пула должен взять сообщение из очереди и обработать его. А очередь, если она пустая, должна подвесить поток до появления сообщений.
    В этом случае, в очереди сперва делается проверка на ее пустоту, после этого или возвращается сообщение, или вызывается `wait()` своего монитора. А при добавлении сообщения `notify()` у монитора вызывается только тогда, когда очередь была пустой.
  • В чём перевозить настольный компьютер?

    1life , вот тебе информация для примера.
    Мой девайс весит 35кг. Это корпус Chieftec BA-02B-B-SL, внутри самое топовое железо 2011 года с хорошим разгоном и охлаждением. Комп до сих пор является очень мощным.
    Я предпочел его вообще не трогать. Купил хороший ноут из серии ASUS ROG, а с компа снял винчестеры.
    Ноут вполне покрывает мои рабочие запросы к железу, хоть и не полностью. Игры я обычно делаю, иногда еще играю. :)

    Подумай, может тебе так тоже будет удобнее?
  • Отличается ли работа с файлами в Linux и Windows?

    @MarkusD Куратор тега C++
    FireShip , это не отличие.
    Windows так же легко понимает пути и с прямым слешем. В этом плане проблем не будет.
    Если ты руками в коде задаешь полные пути, то проблема будет в этом.
  • Есть ли в языке C++ runtime?

    @MarkusD Куратор тега C++
    PacifiK :
    Дилетантство какое-то. Вопрос неявный. Тебе его именно так задали: "есть ли у языка C++ runtime"?
    Что этот человек понимает под словом runtime, ты не интересовался? А что под этим понимаешь ты?
  • Как исправить ошибку 'map итератор неразыменовываемый'?

    @MarkusD Куратор тега C++
    CodeInside , А, домашка. Тогда все норм. :)
    Смотри, если у тебя возникают вопросы по стандартным типам, ты их всегда можешь задать ресурсу en.cppreference.com/w . Помоему это лучший (по критериям удобства, информативности и достоверности) трактат стандарта языка.

    По части велосипеда: попробуй придумать и представить себе дерево, в котором слово - это некоторый путь строго от корня дерева строго к узлу этого дерева. А в узле уже будет храниться частота и прочие характеристики. Уже известный тебе контейнер map тут будет незаменим.
    Для сортировки частот на лету поможет бинарная куча - en.cppreference.com/w/cpp/container/priority_queue . Применять его надо только в нужном месте.
  • Какой смысл в фильтрах Visual Studio?

    @MarkusD Куратор тега C++
    Максим Черепанцев , интересный вопрос... Лично мое мнение - каждой библиотеке свой проект! Сделай для библиотеки проект статической библиотеки, да и наладь зависимости с основным проектом.

    Более того, внутри решения (solution) так же можно создавать фильтры для проектов. Это дает возможность сгруппировать проекты по тематике. Third Party - в одну кучку, Static Libraries - в другую, а основные проекты можно и в корне решения оставить.

    Я предпочитаю высокий уровень организации как кода, так и структуры проекта в файловой системе. Поэтому, с моей стороны, разделение большого массива файлов на проекты в своих отдельных папках с сильным делением на папки файлов проекта, заголовков и исходного кода - бесспорно удобное и качественное решение.
  • Почему срабатывают сразу 3 функции?

    Vadim kyklaed , а у меня бесполезно спрашивать что такое msg_type, на этот вопрос лучше тебе самому ответить. :) Может быть это твоя единица, которую ты с клавиатуры вводишь? Я не знаю.
    Я заметил основную ошибку и показал как ее исправить.

    в словаре нельзя так хранить вызов функции ?

    Ты сам же ответил на свой основной вопрос, почему у тебя происходит три вызова, а не один.
    Тебе в словаре надо хранить результаты вызова функций или ссылки на функции для их вызова?
    Я тебе только показал как хранить ссылки на функции. Все остальное уже зависит от тебя. :)
  • Почему срабатывают сразу 3 функции?

    Потому что должно быть так:
    def msg1(message):
      bot.send_message (....)
    def msg2(message):
      bot.send_message (....)
    def msg3(message):
      bot.send_message (....)
    
    def var(msg_type, message):
      varlink = { '1': msg1, '2': msg2, '3': msg3 }
      varlink[msg_type](message)
  • Как реализовать частичную специализацию для указателя на определённый класс?

    @MarkusD Куратор тега C++
    А, еще забыл сказать что так же хорошо подойдет подход аналогично std::char_traits.
    en.cppreference.com/w/cpp/string/char_traits
    Это шаблон класса, созданный непосредственно для частного инстанцирования и определения набора статических функций, которыми пользуется основной шаблон (для тебя это будет класс List).
  • Как реализовать частичную специализацию для указателя на определённый класс?

    @MarkusD Куратор тега C++
    CodeInside , неа, не понял. :)
    К сожалению я даже общий замысел уловить не смог. Но кое-что другое между собой связать удалось.

    Обратись за помощью к подходам traits / toolkit. Конкретно для твоей ситуации видно что нужны именно черты - traits. Для тебя это будет шаблонная функция, которую уже можно специфицировать.
    Примерно так:
    namespace NodeListTraits
    {
    	template< typename TNodeType, typename TDataype >
    	void AddHead( TDataype data, TNodeType node )
    	{
    		// Общая реализация.
    	};
    
    	template< typename TNodeType >
    	void AddHead( Storage_device* data, TNodeType node )
    	{
    		// Спецификация для `Storage_device`.
    	};
    };
    
    template< typename TNodeType, typename TDataype >
    void List<TNodeType, TDataype>::AddHead( TDataype data )
    {
    	// ...
    	
    	// Черты лучше вызывать только через ADL.
    	NodeListTraits::AddHead( data, node );
    }


    После этого черты можно расширять как душе угодно. Главное - это чтобы для конкретного модуля трансляции специализация черты была описана выше ее использования. Удобнее всего специализировать черты непосредственно рядом с описанием типа, для которого черта специализируется.В твоем случае - это рядом с описанием типа Storage_device.
    Еще надо помнить про ADL (Argument Dependent Lookup) и что черты на самом деле - это семейство перегруженных шаблонов и чистых функций. Поэтому никаких явных раскрытий шаблона функции при ее вызове.
  • Как реализовать частичную специализацию для указателя на определённый класс?

    @MarkusD Куратор тега C++
    CodeInside , методы шаблонного класса не могут быть специализированы без частного инстанцирования или частичной специализации самого шаблона. Поэтому ответ Антон Жилин является единственным решением.
    Еще мы можем побеседовать о причине желания специализировать метод. Может у меня найдется выход для твоей ситуации.
  • Использование вариативного шаблона функции без аргументов?

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

    Чтобы уловить это все, тебе стоит почитать о том, как делался Autodesk Stingray.
    bitsquid.blogspot.ru/2014/09/building-data-oriente...
    Там 4 или 5 статей в блоге, далее по датам после вот этой.

    Суть такова: компоненты для ECS сперва регистрируются. Это нужно не только для их индексации, но и для оптимизации хранения компонентов, и для оптимального управления компонентами для сущности.
  • Использование вариативного шаблона функции без аргументов?

    @MarkusD Куратор тега C++
    Nexeon , да, правильно. :)
    Смотри, в EntityX, Autodesk Stingray, Artemis и у меня в моем фреймворке применяются маски и индексирование компонентов.

    Коротко: на этапе компиляции (ага, снова метапрограммирование) для каждого типа компонента рассчитывается битовый индекс - это всего один поднятый бит на участке из N бит (int32_t, int64_t, 128, 256..). В EntityX, к примеру, это номер бита для std::bitset. Я предпочитаю снова все делать на этапе компиляции.
    У каждой сущности есть битовое поле - маска компонентов. Когда компонент добавляется, в маске поднимается его бит, при удалении - снимается.
    При этом, проверка наличия компонента делается через проверку соответствующего компоненту бита. А для проверки группы компонентов делается битовая маска группы, проверка все так же делается через одну операцию.

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

    Это уже потребует некоторой библиотеки метапрограммирования - MPL. Без нее сделать это все становится сложнее.
  • Использование вариативного шаблона функции без аргументов?

    @MarkusD Куратор тега C++
    Nexeon , весь этот код уже можно отнести к разделу метапрограммирования в C++... Да, я все время забываю что это необычная тема.
    Не прямо такой, а подобный код я имею обыкновение создавать и использовать в своей работе. Он работает. :)

    Общая суть кода такова. Если мы можем проверить наличие одного компонента, то мы точно так же можем проверить и наличие множества компонентов сразу. Для этого нам надо знать функцию проверки каждого компонента из произвольного списка, после чего вызвать набор этих функций, аккумулируя результат.

    std::all_of - простая замена цикла по итерируемому множеству с аккумулятором через операцию `&&`.
    В качестве множества для std::all_of хорошо подходит массив указателей на функции проверки одного одиночного компонента.
    В результате компилятор пишет код проверки группы компонентов за нас. :)

    И еще вот наглядная демонстрация работы этого метода.
    cpp.sh/8b5xo

    Folding expressions безусловно удобнее... Все жду начала широкой поддержки 17го стандарта всеми популярными компиляторами...