Задать вопрос
  • Почему не работает передача контекста между приложениями?

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

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

    list по сути представлет собой несколько структур пусть называются они node, в которой указатели на следующий и предыдущий и значение.

    Структура данных называется: Двусвязный список. А std::forward_list - это односвязный список.

    map вроде схожа на лист(в плане тоже есть node) только они предсталены в виде дерева и в нем производится двоичный поиск

    std::map реализует структуру данных: Бинарное дерево. Чаще всего реализуют в виде RB-дерева.
    В деревьях нет бинарного поиска. Бинарный поиск выполняется только на отсортированных данных в линейном контейнере (векторе, да). Поиск в бинарном дереве выполняется методом прохода в глубину по критерию. Отсюда и берется аппроксимация трудоемкости поиска.
    std::set реализуется тем же способом, но не хранит данные. Это просто дерево ключей.

    unordered_map особо не вникал как что там. Но вроде представлется вектор листов? по крайнер мере стандратная реализация. Гланое что я передаю ключ он хешируется через std hash и я получаю нужное мне значение.

    std::unordered_map реализует структуру данных: Хэш-таблица. Организуются такие таблицы по-разному, но типовая реализация - это разреженный массив двусвязных списков. И тут я прервусь.

    std::deque реализует т.н. разреженный или постраничный массив. Или - Двусвязную очередь. Структура данных в основе: двусвязный список. Элементами списка являются массивы одинаковой длины. Такая организация позволяет манипулировать блоками элементов вместо цельного куска, как в векторе, и добиваться лучшей производительности на вставке, удалении и добавлении элементов по концам деки.
    И смотри внимательно, std::queue и std::stack - это адаптеры, а не контейнеры. А подлежащим по умолчанию в них является именно std::deque.
    Т.е. ты пользуешься std::deque как бы не беря это во внимание.

    А тут я продолжу. Хэш-таблицы обычно организуются как вот такие списки массивов списков или массивы массивов списков. Аппроксимация трудоемкости поиска O(1) достигается тем, что доступ элемента по индексу-хэшу константен при правильно выбранной хэш-функции, которая редко приводит к коллизиям, из-за чего списки не глубже того самого одного элемента.
    Однако, трудоемкость хэш-функции при этом не учитывается, а ведь именно трудоемкость хэш-функции оказывает наибольший эффект на время поиска элемента в хэш-таблице.
    Плюсом ложится организация хэш-талицы. Это - дополнительные расходы.

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

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

    По одному предложению, расскажи внутреннее устройство и опиши структуру данных у std::vector, std::list, std::deque, std::map и std::unordered_map.
    Написано
  • Почему function wrapper с ссылкой в сигнатуре может принимать pointer to member function?

    @MarkusD Куратор тега C++
    Dyikot, вот сейчас смотри внимательно.

    Как это не может если все может?

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

    Есть только один способ убедиться в правильности написанного кода - это найти в стандарте точное место, где объясняется поведение написанного тобой кода. Если такого объяснения нет, если объяснение отличается между версиями стандарта или отсутствует в других версиях стандарта, то такой код не надежен.

    Вот документ примерно 11-го стандарта. Буквально следующая же ревизия документа распространяется за деньги как финальная версия 11-го стандарта.
    Предлагаю тебе найти описание поведения приведенного тобой кода.

    В качетсве примера function wrapper я и использую std::function, а не свою реализацию чтобы все поняли. Определение std::function взято из cppreference

    Я все это понимаю, но прямо говорю тебе не делать таких вводящих в заблуждение вещей. Если тебе хочется оперировать емкими терминами, используй только термины из набора шаблонов проектирования. Тогда тебя поймут правильно уже с большей вероятностью.
    Написано
  • Почему function wrapper с ссылкой в сигнатуре может принимать pointer to member function?

    @MarkusD Куратор тега C++
    Dyikot, вот смотри.
    На примере стандартного function wrapper

    И ты показываешь делегат. А про function wrapper я и всё остальное общество ничего не знаем. Это что-то твоё личное и поэтому другой человек тебя не понимает. Потому что ты говоришь на каком-то другом языке. Не на языке общих терминов.

    Всегда думал что методы просто функции которые первым аргументом принимают указатель

    Однако так никогда не было. Ты заблуждаешься уже начиная с этого убеждения. А ведь понятие метода - фундаментальное. Т.е. у тебя фундаментальные заблуждения.

    Или ссылка неявно к указателю преобразовывается.

    Ссылка - это синтаксический эфемер. Указатель - это тип данных. И как тут одно к другому привести?

    Ты очень сильно путаешься.
    Делегат, т.е. std::function, не умеет захватывать указатели на методы. Он умеет захватывать только указатели на функции или функциональные объекты по значению. Когда тебе нужно через делегат вызвать метод объекта, тебе нужно знать целевой объект для метода, захватить этот объект в замыкании лямбды, в теле которой и вызвать относительно объекта метод. И уже эту лямбду сможет захватить делегат.
    По значению.

    Когда ты пишешь
    template<typename TSender, typename TEventArgs.
    using EventHandler = std::function<void(TSender&, TEventArgs)>;

    то EventHandler<MyType> не начнет для тебя принимать методы. Он будет принимать просто указатели функции, первым аргументом которых ожидается ссылка на объект типа MyType.
    Написано
  • Почему function wrapper с ссылкой в сигнатуре может принимать pointer to member function?

    @MarkusD Куратор тега C++
    Dyikot, методы и не принимают. Метод по его указателю можно выполнить только относительно объекта своего типа. Передать в него this иным образом невозможно.
    Я тебя все еще не понимаю.
    Написано
  • Почему function wrapper с ссылкой в сигнатуре может принимать pointer to member function?

    @MarkusD Куратор тега C++
    Dyikot , мне кажется, тебя сейчас никто не понял. Вот я читаю и ничего не могу понять в твоих словах.

    стандартный function wrapper

    Это про что? Скинь пожалуйста ссылку на описание этого шаблона.

    std::function

    Это - реализация шаблона Delegate.

    При сигнатуре void(T&, ars...)

    Что такое T? Что такое ars?

    При сигнатуре void(T&, ars...) может принимать &T::Method.

    Такая сигнатура определяет тип функции, а не метода. При чем тут метод?

    Разве у всех методов не указатель первый аргумент?

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

    @MarkusD Куратор тега C++
    Wataru, а ведь надо было всего-лишь парой слов расписать про алиасинг и последствия его нарушения. :)
    У тебя в ответе все хорошо написано, но не заведено на алиасинг. Как будто информация у тебя опытная, а не фундаментальная. Поэтому и комментарии полезли.
    Написано
  • А нужно ли заменять dynamic_cast?

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

    И проблема то еще заключается в том что не только же для ContentUIElement нужен шаблон данных. Например если реализовать следующие элементы с шаблонами данных ItemsControl, DataGrid, Expander, TabControl и т.д. И что мне тогда делать для каждого свой метод в IData?

    Не, не надо. В этом случае надо отходить от просто посетителя, но сохранять инверсию контроля.
    Например, у тебя может быть реализация на базе стратегии. Мне в данный период моей жизни более привлекательным для тебя видится реализация провайдера данных.
    По сути метод в IData у тебя остается только один, но теперь он возвращает ссылку на интерфейс провайдера данных. А уже провайдер данных пусть развивается так, чтобы удовлетворять все потребности в поставках шаблонов данных. Через реализацию посетителя снова или уже через прямой контроль.
    Реализация стратегии будет иметь точку входа в виде все того же метода IData, который уже вернет голову стратегии. А от этой точки входа стратегия уже будет ветвиться сперва по элементу UI, а потом уже по реализации IData. Ну или наоборот, порядок не столь важен.

    Но самое главное всегда - это закрывать задачу ровно настолько, чтобы она была решена. Не больше того. :)
    Поэтому твой подход сейчас поди для тебя на этом этапе подходит лучше всего.
    Написано
  • А нужно ли заменять dynamic_cast?

    @MarkusD Куратор тега C++
    Dyikot, а, вон чего это за шаблоны у тебя. Да, я подумал что ты говоришь о шаблонах из языка.
    Но! И в этом случае тебе тоже dynamic_cast не нужен. У тебя в коде он все равно неправильно применяется.

    Закинь, пожалуйста, этот код в сам вопрос, с уточнениями. Я чуть погодя напишу ответ.
    Если уж совсем коротко, то тебе в этом коде нужно применить инверсию контроля и визитера. В этом случае у тебя не будет необходимости кастить в рантайме вообще, т.к. код будет всегда выполняться для актуального типа объекта.
    Написано
  • А нужно ли заменять dynamic_cast?

    @MarkusD Куратор тега C++
    Dyikot , коротко. Нет, вообще не оптимальный. Ты время трансляции и время исполнения перепутал между собой. Из-за этого тебе приходится делать крайне странные вещи. В вопросе у тебя ноль конкретики, но уже имеющееся отдаленное описание выглядит как очень плохой дизайн.
    В тот самый момент, когда dynamic_cast соприкасается с шаблонным кодом, тебе нужно понять что плохо написано просто всё.

    А чтобы я написал ответ, тебе нужно сопроводить вопрос как можно более полным описанием работы своего кода с примерами же своего кода. И главную часть в этом описании должны занимать ответы на вопрос "Зачем это здесь?" и "Почему нельзя иначе?".
    Написано
  • Как перепрошить Asus Transformer Pad TF303CL (K014)?

    Серёга,
    значит сейчас не получится это сделать?

    По всей видимости уже не получится. Я бегло поискал по профильным форумам ASUS и увидел что с 21-го где-то года в целом все старые планшеты ASUS не удается перепрошить. И поддержка говорит одно, если коротко: Выкинь и купи новый.
    Написано
  • Как перепрошить Asus Transformer Pad TF303CL (K014)?

    Серёга, не надо "на вы". Я один и никого не представляю.

    Чтобы правильно поставить рут, нужно разблокировать бутлоадер. Процедура разблокировки на момент 14-15 годов была хорошо описана прямо на сайте поддержки ASUS для 303-го. И APK для разблокировки там тоже был, который всю работу и выполнял.
    Если я все правильно вижу сейчас, есть проблема с прикладными серверами ASUS, которые используются в процессе разблокировки. Адреса или поменялись, или ASUS эти сервера отключил.
    Написано
  • Как перепрошить Asus Transformer Pad TF303CL (K014)?

    Серёга, я что-то не пойму. У тебя проблема бутлоадер разблокировать? Чем же тебе официальный метод с сайта ТП ASUS не подходит? У меня 303й был, я его прошливал и рутовал для своих нужд. Все нормально работало прямо по инструкции от производителя еще в 2014 году.
    Написано
  • Github перестал отправлять sms на российские номера?

    DVoropaev , из-за вторичных санкций 23-го года и очередного пакета осенью 24-го года гитхаб отказался поддерживать отправку смс на номера РФ.
    Написано
  • Как определить виртуальные методы в полной специализации шаблона?

    @MarkusD Куратор тега C++
    kriptonus , ты лучше расскажи какую задачу ты хочешь вот таким кодом решить.
    Написанное странно выглядит даже не с т.з. языка, а с т.з. применения. Этот код непонятный и выглядит так, будто ты этим кодом хочешь закрыть никак с этим кодом не связанную задачу. Разумеется, даже если тебе что-то подскажут, у тебя ничего в результате не выйдет.
    Поэтому я и прошу рассказать о самой задаче.
    Написано
  • Почему возникает ошибка C2512 в конструкторе с std::initializer_list?

    @MarkusD Куратор тега C++
    Павел Соколов,
    у меня не транслятор ошибку пишет, а компилятор

    Это замечательно, только неправда. Ошибки тебе пишет именно транслятор. С компилятором ты вообще никак сейчас не взаимодействуешь.

    По сути дела. У тебя нет знаний о процессе конструирования объекта. Из-за этого ты не понимаешь что в момент начала выполнения тела любого конструктора type arr[N]; у тебя уже сконструирован. И транслятор тебе сообщает именно об этом. А подходящего конструктора по умолчанию c_function у тебя в коде вообще нет. Он удален по умолчанию. Потому что ты так написал, чтобы он стал удаленным по умолчанию.

    Wataru в своем ответе тебе все правильно описал. И проблему, и метод решения проблемы.
    Я с деталями и уточнениями подключусь если для этого будет смысл.
    Написано
  • Почему возникает ошибка C2512 в конструкторе с std::initializer_list?

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

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

    @MarkusD Куратор тега C++
    Wataru, SDL настолько примитивен, насколько примитивен GPU в конце цепочки его управления. :)
    SDL - это надстройка над OGL второго или третьего порядка. Автор просто не включил тот самый пресловутый алиасинг для презентации экрана. Он по умолчанию выключен.
    Написано