Я не предлагаю добавлять новый класс. Я предлагаю использовать существующий. Для каждой платформы уже есть такой. Вот в него и надо добавить эти три статических публичных метода.
1. Так существующий - это SerialPorEngine, а не SerialPorEnginePrivate
2. SerialPorEngine - чисто абстрактный класс, который неимеет нигде своей реализации (т.е. нету файлов serialportengine.cpp и т.п.),
поэтому появляется вопрос: а куда собственно втыкать реализацию этих трех методов?
Например, можно втыкнуть эти статические методы не в базовый SerialPorEngine - а в наследуемые WinSerialPorEngine, UnixSerialPorEngine.
И тогда в соответствующем платформо-зависимом SerialPorInfo_mac/linux/win сделать инклуды соответствующих WinSerialPorEngine, UnixSerialPorEngine и т.п.
т.е.
serialportengine_unix_p.hC++ (Qt)
class UnixSerialPortEngine : public QObject, public SerialPortEngine
{
...
public:
static qint32 settingsFromRate(qint32 rate);
static qint32 rateFromSettings(qint32 rate);
static QList<qint32> standardRates();
...
}
serialportengine_win_p.hC++ (Qt)
class WinSerialPortEngine : public QWinEventNotifier, public SerialPortEngine
{
...
public:
// Но тут для Windows вообще не понятно, нужны ли эти преобразования вообще?
// т.к. rate имеет реальное числовое значение и нет необходимости его преобразовывать.
static qint32 settingsFromRate(qint32 rate);
static qint32 rateFromSettings(qint32 rate);
static QList<qint32> standardRates();
...
}
serialportengine_symbian_p.hC++ (Qt)
class SymbianSerialPortEngine : public QObject, public SerialPortEngine
{
...
public:
static qint32 settingsFromRate(IBps rate);
static TBps rateFromSettings(qint32 rate);
static QList<qint32> standardRates();
...
}
далее, в
serialportinfo_unix.cppC++ (Qt)
...
#include "serialportengine_unix_p.h"
...
...
qint32 rate = UnixSerialPortEngine::settingsFromRate(B9600);
...
serialportinfo_mac.cppC++ (Qt)
...
#include "serialportengine_unix_p.h"
...
...
qint32 rate = UnixSerialPortEngine::settingsFromRate(B9600);
...
serialportinfo_win.cpp C++ (Qt)
...
#include "serialportengine_win_p.h"
...
...
// Тут вообще под сомнением, нужно ли это.
qint32 rate = WinSerialPortEngine::settingsFromRate(9600);
...
serialportinfo_symbian.cppC++ (Qt)
...
#include "serialportengine_symbian_p.h"
...
...
qint32 rate = SymbianSerialPortEngine::settingsFromRate(EBps9600);
...
что ж ты так любишь плодить классы?
ООП
3.
То класс опций, теперь чуть было стандартных скоростей не сделал.
Дык для опций - это логично, раз они одинаковые для всех платформ - то логичнее их разместить в одном месте,
тем более, в этом случае нет необходимости придумывать им новые имена.
Т.к. из-за того, что я убрал для них префикс m_ , то для некоторых опций их имена стали такие-же как и имена методов этого класса, что
вызывало ошибки компиляции.
ИМХО, я не вижу проблем с использованием отдельного класса для опций.
4. Ты не ответил насчет реалзации хранения таблицы в виде QHash или статик аррай...