Да, уже всё сказано, прекращаем!
Вот конструктор перемещения не помешал бы ничем - переместить хендл на сокет как раз проблемы нет. А вот копировать - тут уже надо листать WinAPI как это по правильному сделать. Перемещение на деле - самое простое, что можно поддерживать.
Но да, мой класс и на это забил подразумевая использование в месте применения.
Без копирований и прочих RAII - RAII на самом деле это корневая концепция плюсов подразумевающая как раз и вопросы копирования (т.к. конструктор копирования это resoure acquisition - RA который дожен быть по RAII - II (Is Initialization)).
ну что тут сказать, слава Г-споду за компилер который всегда подскажет номер строки в которой косяк.
Сокет-то передать – нет проблемы, а вот то, что деструктор у Вас закрывает нахрен соединение – могло бы стать проблемой (если оно открыто в момент перемещения).
Нет, тут надо или делать очень аккуратно (запасшись горохом), либо (как я бы поступил) делетить всё нахрен и не париться.
Давайте завязывать, не место здесь для таких дискуссий, народ вон уже подключается не понимая даже о чём речь.
Ну тут всё просто - конструтор перемещения бы сделал btSocket после перемещения равным INVALID_SOCKET, на то он и конструктор перемещения “зачищающий” после себя поле боя и нормально было бы в плане перемещения именно.
Перемещение именно так и устроено - деструктор будет вызван всегда.
Коллеги у меня вопрос. Вот то о чем вы говорите о правилах дефиниции классов в плюсах, оно во всех арудино либах должно быть по таким канонам? а оно там есть в таком каноничном виде? Или в ардуино это необязательно?
По правильному - везде.
Единственное, что я понял из темы.
ТС, что за bluetooth-модуль HT-06 ? Где про него почитать?
…сокет… так и просится слово - водяра
В данном случае не поможет, кстати.
В чём вообще проблема - в том, что класс заявлен как могущий быть скопированным.
Точнее никак не обозначено можно ли его копировать, а если да то как и как следствие плюсы вменяют конструкции копирования по умолчанию - почленное копирование содержимого.
Никаких предупреждений и тем более сообщений об ошибках не будет.
Более того - этот код даже полагается именно на такое поведение для структуры Info - она содержит строку std::wstring и плюсы применяют к ней конструктор копирования или operator= в данном коде “по умолчанию” что выглядит просто и естественно.
Но вот сам класс BTSerialClient нельзя копировать если открыт сокет - появятся два владеющих сокетом объекта каждый из которых в деструкторе попытается закрыть сокет. Поэтому правильное применение класса должно избегать его копирования - что реально надо было бы в коде зафиксировать явно запретив операции копирования, в плюсах есть такая опция.
Растекусь тут мысию по древу, это уже не спор ради спора, а так, брюзжание на тему, так что думаю можно.
Плюсы уникальный язык среди тех которые я знаю в том как сильно он повлиял на мир программирования и сколько копирований его синтаксиса появилось после него, но при этом самым парадоксальным образом никто не скопировал главное что составляет дух пронизывающий весь этот язык - это value-type-ы.
Если меня спросить в чём суть и дух языка C++ я отвечу коротко: value-type-ы. Суть и дух C++ это то, что это объектно-ориентированный и шаблонный язык программирования построенный вокруг value-type-ов.
Ни C# ни Java даже рядом не валялись - они выстроены в строгой парадигме ссылочной природы объектов, хотя шарп и поддерживает структуры ради скорости, но только лишь ради неё и не настаивает. Delphi/Free pascal на похожих позициях - record-ы и object-ы есть формально, но по факту тебя заставляют программировать на class-ах и не выделяться. И это правильно. Про все скриптовые нетипизированные языки даже не заикаюсь - там ссылочное заповедовано.
Так вот плюсы в этом смысле уникум - они настаивают наоборот на том, что создав класс тебе проще всего создать его объект “in place”, т.е. прямо в той ячейке памяти на которую ты фигурально выражаясь укажешь размещая в ней переменную.
Это вот и есть value-type. В шарпах, дельфи и скриптовых языках создавая объект ты создаёшь его в куче, а в переменную ложится только ссылка на этот объект - это то, что я называю ссылочной природой объектов.
Плюсы же располагают объект вот прям именно в переменной которую мы заявили - и поэтому возникает огромный ворох побочных вопросов которые надо решать.
И один из таких первостепенных вопросов - это что сделать если мы встретим конструкцию вида
a = b;
для наших объектов?
В языках с ссылочной природой объектов вопрос даже не возникает - просто ссылка на объект из b скопируется в a. И a и b начнут ссылаться на один и тот же объект на который был нацелен b в начале.
Но это не про плюсы.
Плюсы должны озаботится копированием значения (value) переменной и для этого программист должен хорошо подумать и предоставить алгоритм как это надо делать в тех или иных случаях.
Отсюда порождаются концепции “конструктор копирования” и “оператор копирования” которые в последних эволюциях плюсов еще обогатились концепциями “конструктор перемещения” и “оператор перемещения” - это та четвёрка которая плюс один (конструктор по умолчанию) упоминалась выше как пятерка.
И вот никакая “падла” из “наследников” никаких этих сложностей забирать не захотела. Синтаксис заимствуют, но value-type-ы - решительно нет.
Забавно всё это.
Ой ну конечно же HC-06. Загнался, надо бы исправить, но что-то не могу найти кнопки…
А что у Вас на ардуино стояло?
HC-06 это и есть bluetooth-свисток для ардуины.
А я к нему коннекчусь с ноутбука, т.к. в ноутбуках bluetooth встроенный и можно прямо с ноутбука засылать в ардуину данные в свисток.
Понял. У меня просто наоборот - HC05 к ПК включён, а принимает jdy31. Не пробовал никогда 06.
Неплохо бы один - два простых примера к библиотеке.
Слабое подобие HC-05, но за счёт простоты в чём то даже приколен.
Только клиент и только 4 контакта - нет выбора режима AT-команд.
Поэтому он входит режим AT-команд когда не спарен ни с чем.
Вот просто если включился и не спарен - то засылка в него данных воспринимается им как AT-команды.
И их очень мало по сравнению с HC-05 - только только нужные - выставить имя устройства и скорость общения серийника и практически всё.
Поэтому эдакий огрызок, но в целом работает отлично.
Самый простой пример такой:
BTSerialClient btSerial;
if ( btSerial.connect( L"myDeviceName" ) )
{
btSerial.write( std::string( "Hello!" ) );
if ( btSerial.available() )
{
std::string answer = btSerial.readString();
...
}
}
Хм, вроде как понял - старые сообщения редактировать нельзя на форуме.
Отсюда большая просьба к администраторам если кто заметит - можно ли отредактировать первопост и заголовок исправив HT-06 на HC-06?
чёйто не понимая, слово сокет я слышал, уже полдела сделано
ТС, раз спорите с Евгением Петровичем, значит Вы серьёзный библиотекарь
Не было желания проверить свою библиотеку на загрузке скетчей в ардуино “по воздуху”?
Да нет у меня намерения спорить - я уже и согласился и пояснил слушателям в чём был предмет замечения, если что.
Я не настолько прокачан и вообще есть сомнения что это возможно.
А в том с чем я сейчас копаюсь - ардуино мини к которой подключены пять серв что конфликтует с SoftwareSerial на котором сидит HC-06 вообще ни о какой стабильной даже связи речи быть не может - всё глючит и сыпется на глазах xD.
14 июля этого года я создал тему на форуме gamedev.ru где являюсь давнишним завсегдатаем Android ROBOT / Железо / Форум / Флейм / GameDev.ru — Разработка игр и поэтому я вчера зарегистрировался здесь.
Там в той теме каждый шаг описан как жизнь меня довела до ардуин. xD
Уже две Arduino Uno, одна Mini и одна ESP32, мелкая россыпуха из двух комплектов-конструкторов, 4 wheel drive комплект который даже боюсь подступать к тому чтобы собирать и робоманипулятор от Enjoy Robotics - вот с ним сейчас и вожусь прицепив блютуф-свисток.
Эх, люблю вот это вот всё что пахнет 8/16 битами и ретроромантикой.
В основном просто начитываюсь по каким то интересным для себя вопросам и потом рожаю статьи-выжимки.
Для примера:
Блеск и нищета 8/16-битных консолей и ПК / Железо / Форум / Флейм / GameDev.ru — Разработка игр “Блеск и нищета 8/16-битных консолей и ПК”
Блеск и нищета 32/64-битных консолей и ПК / Железо / Форум / Флейм / GameDev.ru — Разработка игр “Блеск и нищета 32/64-битных консолей и ПК”
В общем ардуинки полюбил сразу как прикоснулся.