b-s-a Спасибо, вроде разобрался и залил твою версию.
И размещай уже файлы на гиториусе - работать будет проще.
у меня на работе админом закрыты все порты кроме 8080 и т.п.. , т.е. я не могу оттуда сразу вносить изменения.
Поэтому я аттачу на форум, а потом, из дома уже коммиты вношу.
кстати, очень не рекомендую вызывать виртуальные методы из конструкторов. Особенно, в надежде, что конструктор базового класса вызовет переопределенный наследником метод. По стандарту, виртуальные методы наследника становятся доступны (v_table базового класса замещается на таблицу наследника) непосредственно перед входом в его конструктор.
Ок.
Зачем нужен метод void AbstractSerialPortPrivate::initVariables()? Чем конструктор не подходит?
Подходит. Просто писанины в конструкторе прибавится.
Предлагаю вместо этого:
C++ (Qt)
virtual bool setRate(qint32 rate, SerialPort::Directions dir) = 0;
virtual qint32 rate(SerialPort::Directions dir) const = 0;
...
...
...
Ок. Только нужно наверное немного изменить твою реализацию методов setRate() / rate().
Аналогично с остальными методами
Ну, вот, с методами setPort() / port() так просто не получится. Т.е. твою реализацию нужно подправить.
Что имею ввиду:
переменная mPort должна по идее
всегда хранить длинные имена портов,
нативный метод setPort() (к примеру, для винды) должен из короткого имени "COM1" делать длинное "\\\\.\\COM1", а если на входе длинное имя - то ничего не делать.
И далее, это длинное имя он присваивает переменной mPort. (В линуксе и пр. ОС аналогично).
Метод же port() должен из длинного имени делать короткое и возвращать результат (мы ж так условились).
Поэтому можно было бы добавить еще методы nativeSetPort() / nativePort(). Т.е. для каждой из платформ будет своя реализация (на QRegExp к примеру).
Но если оставить так как есть сейчас - то придется химичить с дефайнами в serialport_p.h, что не есть хорошо, т.к. для этого есть serialport_p_unix/win.h
ИМХО.
C++ (Qt)
virtual bool saveOldsettings() = 0;
virtual bool restoreOldsettings() = 0;
Действительно ли это нужно? Или все-таки можно использовать стандартные механизмы?
Что имеешь ввиду под стандартными механизмами?
Сохранять/восстанавливать предыдущие параметры то нужно по-любому (после открытия и перед закрытием).
Насчет упростить и оставить virtual void detectDefaultSettings() {} :
ну, тут если упрощать - то слишком много кода придется писать в этот метод,
т.е. будет громоздко. ИМХО, лучше его разбить на 5 стадий по смыслу.
Насчет префиксов m/m_ у приватных членов - то может быть, их вообще не писать (т.е. опускать их)?
т.к. я бегло просмотрел исходники Qt и там очень редко встречается этот префикс.
Хотя, в исходниках QtCreator - повсеместно.
А то лишняя писанина получается и имя переменной растет.
----
А в целом, просмотрев твои идеи, согласен, давай так.
Ищи в этой же теме, я как-то тебе делал "Запрос на слияние" ещё в самом начале как ты на гиториусе поселился.
ок, думаю по ходу процесса, думаю, мне станет яснее.