Задать вопрос
  • Почему возникает ошибка при вызове вирутального метода в "operator="?

    @MarkusD Куратор тега C++
    Wataru , есть неточность, она вводит в заблуждение.
    Во-вторых, это проблема из-за правил поиска операторов. Они ищутся только в типах, которые участвуют в выражении, т.е. int и WidthProperty.

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

    Андрей Димаков , понимаешь какая штука. Ты сейчас в вопросе написал какой-то несвязный и бессмысленный текст.
    Вот для тебя он имеет какой-то свой смысл. А для связанных с сетевым оборудованием людей это - бессмыслица. Да и в комментариях, честно говоря, тоже что-то весьма неопрятное.
    И самая печаль (для тебя) в том, что это как раз тот случай, когда если надо объяснять, то не надо объяснять.

    Проблема - твоя, не наша. Чтобы ее описать для нас, тебе нужно обрести некоторое базовое образование самостоятельно. В правильно заданном вопросе кроется половина ответа. Это означает что для получения ответа нужна грамотность при составлении своего вопроса.
    Написано
  • Как вкорячить в вентилятор охлаждения pwm регулятор?

    runapa, все верно. Мать это понимает через два пина, которые на разъеме кулера закорочены на землю (5-6).
    Эти два пина на разъеме матери надо закоротить чтобы она думала будто у нее есть кулер.
    При этом вероятно мать будет бить тревогу что кулер есть, но не крутится. Это из-за датчика оборотов (4). Эту функцию на матери проще отключить чем твоими силами доставить на этот пин данные.
    Хотя... Вот как я писал выше, таким же образом, т.е. перепиновкой, можно из трехпинового входа регулятора сделать 6-пиновый разъем для матери. На контроллере теряется не больше 20мА судя по описанию, мать это бесчинство выдержит даже не заметив.
    Написано
  • Как вкорячить в вентилятор охлаждения pwm регулятор?

    runapa , а, вон чего. Это проприетарный HP-шный разъем.
    В такие моменты полезно сопровождать вопрос фотографиями. Однако...
    Я тут быстро глянул. Вопрос уже много лет как решен на redit: [1], [2], [3]. На том же али можно купить переходник с 4-pin PWM на этот разъем.
    Но тебе даже этот переходник не нужен, если у тебя есть 4-пиновый хвост от кулера. Можно просто перепаять провода по схеме или вообще вынуть пины из 6-пинового и вставить в 4-пиновый правильно.
    Написано
  • Как вкорячить в вентилятор охлаждения pwm регулятор?

    runapa , коротко: ты не понимаешь всё.
    У AFC0912DF трехпиновый разъем. Ты не приложил фотографии разъема, кулера и шелкографии на его плате. Гугл по артикулу показывает только трехпиновые версии.
    Регулятор имеет трехпиновый ввод, четырехпиновый выход с PWM и крутилку для подстройки скважности ШИМ-сигнала оборотов. У тебя не получится поженить трехпиновый кулер с PWM-выходом регулятора. Трехпиновые кулеры регулируются только через напряжение на входе.
    Чтобы регулировать обороты такого кулера, тебе нужен регулятор по напряжению, а не ШИМ-генератор.
    Написано
  • Какой выбрать сервопривод для детской кровати?

    FarikK, так, вот сейчас надо очень серьезно задуматься.
    Перед тем как делать подобные штуки, сперва следует самостоятельно изучить вопрос возможных нарушений у ребенка от неконтролируемого и продолжительного укачивания.
    Лично я полностью отказался от этой идеи когда почитал.

    Сама система - это Nema17, TMC2209 и STM/Arduino. Больше в железе ничего не надо, код надо мощный написать и панельку настроек сделать понятной для жены/тещи/няни.
    Но ты забудешь. Забудешь выключить вовремя, забудешь поставить правильное время, забудешь поставить правильную амплитуду, забудешь периодически контролировать. А все эти автоматические качалки необратимо влияют на ребенка. Готов ли ты пойти на такой эксперимент со своим собственным ребенком?
    Написано
  • Возможно ли перегрузить с помощью ограничений?

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

    По поводу переименования. Там буквально плачет и просится вариант: Ranges::FirstOrDefault::ByValue и Ranges::FirstOrDefault::ByCriteria.
    Написано
  • Возможно ли перегрузить с помощью ограничений?

    @MarkusD Куратор тега C++
    Dyikot, а если элементами твоей коллекции являются объекты std::function, как ты планируешь выбирать перегрузку Ranges::FirstOrDefault?
    Твой предикат - это функтор. Твои элементы коллекции - это функторы. Как быть?
    Написано
  • Почему двоится изображение на мониторе?

    neison,
    а не опасно в холодную вытягивать кабель и тем более подключать его заново?

    Привет. :)
    На холодную - это при полностью выключенном железе.
    На горячую - это в момент работы железа.
    Оба варианта безопасны. HDMI или DP гальванически развязаны на обоих концах, выравнивание потенциалов при подключении не требуется.

    Причем если первый был во время часовой и более сессии, то последующие могли продолжаться каждые 15 минут.

    А это может говорить о перегреве видеокарты. Конкретно это может быть локальный малодетектируемый перегрев управляющего элемента на плате. Возможно из-за высокого напряжения. Собственно SpecteRED написал об этом и теперь уже именно эта гипотеза выглядит самой вероятной.

    Есть предположение насчет 2х видеоадаптеров (одновременно с основной видеокартой работает встроенная от ryzen).

    Только это не ноут. При подключении дискретки встроенное граф.ядро процессора отключается наглухо. Иначе мы бы уже давно использовали его для нужд физики. Но возможности на самом деле нет.
    Написано
  • Почему не работает оператор for each в C++?

    @MarkusD Куратор тега C++
    Adamos, ты прав. По ошибке все сразу понятно. И исправление легко делается своими силами.

    alikhan_hero, вот что ты написал:
    int numbers[rows][columns] = { {1, 2}, {5, 4}, {9, 7} };

    Чем твой код отличается от кода ниже?
    using IntColumns = int[ columns ];
    using IntMatrix = IntColumns[ rows ];
    
    IntMatrix numbers = { {1, 2}, {5, 4}, {9, 7} };

    Каким должен быть тип значения для цикла по numbers в обоих случаях?
    Что вернет std::begin( numbers ); в обоих случаях и какой тип будет у этого результата?
    Написано
  • Почему не работает оператор for each в C++?

    @MarkusD Куратор тега C++
    Adamos, на auto&& тогда уж. Действительно, зачем человеку разбираться в тонкостях и деталях, когда можно просто бахнуть обобщение и пойти дальше. :)
    Написано
  • Можно ли узнать типы сигнатуры std::function?

    @MarkusD Куратор тега C++
    Dyikot, для информации.
    Тут только прототип коллбека, т.е. тот же функтор. Все описано в репке. Не советую использовать этот код, я не задумывал его для использования в проектах.
    Возможно код натолкнет тебя на какие-нибудь выводы. В моем коде все многократно серьезнее чем в этом прототипе, но событие и коллбек сделаны схожим с прототипом образом.
    Ну и советую посмотреть на libsigc++ еще.
    Написано
  • Можно ли узнать типы сигнатуры std::function?

    @MarkusD Куратор тега C++
    Dyikot, требуй от пользователя только минимальную информацию для работы твоего кода.
    Выводи недостающие для работы твоего кода части исходя из полученной от пользователя информации своими руками.
    Тебя ведь ничто не останавливает от того, чтобы самостоятельно инстанцировать функтор из std::function из параметров шаблона события.

    У тебя д.б. так:
    template< typename >
    class Event;


    Частичная специализация защищает тебя от пользователя, которому захотелось странного.
    template< typename TResult, typename... TArguments >
    class Event<TResult ( TArguments... )> final
    {
    };


    Дальше в этом коде у тебя все сразу под контролем. Выведи тип функтора, откажись от шаблонов операторов, используй выведенный тип функтора в операторах, используй параметры TResult и TArguments для определения оператора функционального вызова.
    Шаблон простой как три копейки. Тебе незачем делать его сложнее. :)
    Написано
  • Можно ли узнать типы сигнатуры std::function?

    @MarkusD Куратор тега C++
    Dyikot, так. Но зачем тебе std::function здесь? Для чего ты обязываешь своего пользователя инстанцировать шаблон события именно таким образом?
    Ведь это ни тебе(писателю шаблона), ни ему(пользователю шаблона) не нужно.
    Написано
  • Можно ли узнать типы сигнатуры std::function?

    @MarkusD Куратор тега C++
    Dyikot, но я ведь не ругался на саму шаблонность события. :)
    Я ругался только на то, что у шаблона класса события есть шаблоны методов. Ты контроль потерял только из-за этого и сейчас из-за этого же пытаешься свой код подотунуть костылями.
    Приведенный код никуда в плане качества не сдвинулся. Он такой же неудачный.

    Наследоваться от стандартных типов - весьма порочная практика. Наследование - это вообще очень узкий инструмент. Оно подходит только тогда, когда ты можешь контролировать переходы объектов по иерархии наследования. У тебя же тут даже LSP у хендлера не соблюдается. Т.е. снова плохой код. Но позволь мне не вдаваться в объяснения, ведь тебе лучше все изучить и понять самому, почему я говорю именно так.

    Подумай, каким образом из template< typename > можно получить и тип результата функции, и типы всех ее параметров всего за одну частичную специализацию шаблона.
    Тебе не нужно передавать в событие тип хендлера.
    Написано
  • Можно ли узнать типы сигнатуры std::function?

    @MarkusD Куратор тега C++
    Dyikot, если разобрался, то и хорошо.

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

    void operator+=(auto&& handler)
    Это называется обобщенной функцией. Тут у тебя оператор. Он обобщенный. Что это значит?
    auto&& - это универсальное обобщение. Конкретный тип из него будет выведен в момент передачи аргумента.
    Конкретный оператор у тебя из обобщенного будет выведен для типа каждого из переданных для его вызова хендлеров. Буквально в этот оператор ты можешь передавать все что только захочется и код будет пытаться собраться. Внутри оператора, в строчке
    _handlers.emplace_front(std::forward<decltype(handler)>(handler));
    код будет пытаться привести переданный тобой хендлер к типу THandler.
    Насколько я вижу, ты используешь C++20 и тебе доступно неявное приведение стандартных функторов. В результате C++20 только усугубляет тебе проблему в коде, позволяя то, что ты написал.

    Что у нас дальше.
    template<typename TObject, typename TEventArgs> requires std::derived_from<TEventArgs, EventArgs>
    void operator()(TObject* sender, const TEventArgs& e) const

    Это шаблон оператора функционального вызова. Этот оператор из твоего события делает функциональный объект или функтор.
    Но у тебя это шаблон. А инстанцируется он от любых аргументов, которые ты ему передаешь. И внутри кода шаблона у тебя код неявного приведения аргументов к типам параметров THandler.
    И этот процесс ты вообще никак не контролируешь.

    Этот код вообще никуда не годен. От него отказаться надо, наверное, прямо со вчера. Сегодня ты чуть-чуть переписал этот код, но по сути не сделал ничего полезного. И от этого кода все равно нужно отказаться.
    Вот такое мнение вызвал твой код у человека, который ежедневно через code review проживает добрых 4 часа своей рабочей жизни.
    Если спросишь про то, как тогда должно быть чтобы код был успешным, то я только предложу тебе изучить для начала как определяются и записываются типы функций и обратить пристальное внимание на то, как инстанцируются функторы из шаблона std::function. Постарайся разобраться с возможностями, которые тебе открывает мой совет.
    Написано
  • Можно ли узнать типы сигнатуры std::function?

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

    Если _handlers это коллекция делегатов, то они у тебя все одного типа и тебе про них все итак известно.
    Написано
  • Можно ли узнать типы сигнатуры std::function?

    @MarkusD Куратор тега C++
    mayton2019, потому что RTTI )))
    Но это я просто вдогонку стиля беседы. В вопросе нет ни слова про RTTI, Дима на что-то свое подумал и вот так решил выразить свое мнение. Помогает ли его мнение хоть кому-то - вопрос отдельный. Особенно с учетом факта, что вопрос к RTTI даже косвенного отношения не имеет. Вопрос имеет крайне отдаленное отношение лишь к интроспекции, которая к RTTI тоже никакого отношения не имеет.

    А вот дальше будет по сути дела.
    Dyikot , вопрос у тебя понятный и даже обычный. Да, в общем случае можно узнать эти аргументы. Чтобы помочь тебе, сперва мне надо понять как ты хочешь распоряжаться полученной информацией. Допустим, у тебя уже есть знание об этих типах, пусть их будет даже не два, а заранее неизвестное N.
    Что у тебя по ним в планах дальше? Как хочешь с ними работать?
    Написано
  • Как мне получать файлы от пользователей?

    @MarkusD Куратор тега C++
    Ars_15, с++ и "стандартность" несовместимы. Есть только один стандарт - стандарт C++. Остальное все отдается на откуп пользователям.
    Тебе стоит дополнить свой вопрос информацией. Ты написал про проект и пользователей. Пользователи и проект на одном ПК работают? Или на разных?
    Начнем с ответа на этот вопрос.
    Написано
  • Как считать числа из текстового файла в массив на с++?

    @MarkusD Куратор тега C++
    Aleks_Kuzo, если помогло, ответ надо пометить как решение.
    Написано