Задать вопрос
  • Почему 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 второго или третьего порядка. Автор просто не включил тот самый пресловутый алиасинг для презентации экрана. Он по умолчанию выключен.
    Написано
  • Где найти чистые исходники мобильного сервера SAMP / CRMP?

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

    pasha_nevalyasha, если появился другой вопрос, то и создавай другой вопрос. В этом вопросе ответы получены и решение найдено.
    Правилами запрещено размещать несколько разнородных вопросов в одном.
    Написано
  • В visual studio для c++ пишет ошибки E0070. Как их убрать?

    @MarkusD Куратор тега C++
    Dyikot, ну вот. Поступают уточнения по контексту проблемы. Это клево. :)
    Давай коротко скажу. Даже в 25-м году пенять на неполную поддержку C++20 все еще рано.
    Да, уже вышел 23-й стандарт. Да, уже готовится фиксация 26-го стандарта. И что? подавляющее большинство производственного кода как было на C++17 и ранних стандартах, так и остается.
    Стимула быстро и точно вводить полную поддержку C++20 нет ни у кого из разработчиков трансляторов.
    Да, вот тут у тебя отрыгнуло студию. Нет, это не показатель. Потому что в другом месте отрыгнет GCC или Clang. Или Xcode дуба даст. Или плойкин/боксовый/сычевый транслятор, которые базируются на тех же LLVM и GCC. Или андроид тебе скажет: "А мы такое не поддерживаем, держите заглушечку".

    И я сейчас не занимаюсь адвокатурой проблемы в студии. Но вот о чем говорю: Ты ведь уже создал тикет в поддержке студии со своей проблемой? Создал же? Поди нет. А обсуждать проблему надо там. И людей надо туда звать, чтобы разработчики студии поскорее чесаться начали для исправления проблемы. Я так делаю с каждой проблемой поддержки стандарта, с которой сталкиваюсь. И мои тикеты довольно хорошо закрывают.
    Написано
  • В visual studio для c++ пишет ошибки E0070. Как их убрать?

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

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

    Иными словами, это не столько проблема кода, сколько проблема структуры проекта и организации связей между файлами проекта.
    Написано