VK
Viktor KalesnikovDec. 30, 2021, 7:53 a.m.

Как создать класс вызывающий функции по входному числу 0-255?

network, server, protocol

Есть сетевой проприетарный протокол, который присылает пакет с командой в числовом обозначении 0-255.
В зависимости от того какое будет число и будет вызываться конкретный метод обработки пакета.
Сейчас это громоздкий switch что очень некрасиво и тупо :)
Что можно придумать по принципам ООП?
Ничего подходящего не приходит на ум :(

Буду очень благодарен за подсказки.

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
2
VK

По такому принципу может быть?
Пока как то слабо себе представляю как реализовать вызов функции с именем перечисленным в списке enum: connect, message, notice.

class SoundEffect : public QObject
{
Q_OBJECT
public:
enum SoundType {
connect,message,notice,
};
Q_ENUMS(SoundType)
QString valueToKey(SoundEffect::SoundType index);
private:
QMetaEnum metaEnum;
};

Вы в любом случае упрётесь в маршрутизацию сообщения от этих цифр 0-255 до вызова конкретных методов и функций. А все эти пляски метасистемой Qt в данном случае лишь усложнение кода.

Если у вас switch case выглядит так

switch (number)
{
    case 0: function_0(); break;
    case 1: function_1(); break;
    case 2: function_2(); break;
}

то это нормально, реально - это в порядке, если делать что-то подобное через метасистему, то в конечно счёте это переусложнит код и сделает его понимание довольно расплывчатым.

Единственное, что будет реальный улучшением, это добавить enum, чтобы все эти числа не выглядели бы так магически.

То есть сделайте так:

enum SoundType 
{
    connect,
    message,
    notice,
};

switch (soundType)
{
    case SoundType::connect: connect(); break;
    case SoundType::message: message(); break;
    case SoundType::notice: notice(); break;
}

Таким образом код будет понятным, и по enum можно будет в других местах кода лучше организовать информацию.

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Fornex

Let me recommend you a great European Fornex hosting.

Fornex has proven itself to be a stable host over the years.

For Django projects I recommend VPS hosting

Following the link you will receive a 5% discount on shared hosting services, dedicated servers, VPS and VPN

View Hosting
MP

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:60points,
  • Rating points-1
SI

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:60points,
  • Rating points-1
k

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:90points,
  • Rating points8
Last comments
H

Python: How to Test Internet Speed

In behalf of cinephiles who submit self-referential scares, these 10 movies iron crucial spirits at the audience — and themselves. The “Bay” franchise returned to theaters this weekend wit…
H

Python: How to Test Internet Speed

There may be no animus franchise that opens with as dull-witted and satiating a ritual as Scream. As the shaping followers’s logo appears on wall, we rather enter upon hearing the ringing of a l…
A
  • Andrew
  • Jan. 12, 2022, 11:41 a.m.

Qt/C++ - Lesson 038. Switching between windows in the Qt

Здравствуйте, а как сделать чтобы второе и третье окно не сохраняли свои параметры а создавались заного? Только начинаю изучать прогграмирование и пишу протенькую игру сделал 2 окна, одно с меню…
j
  • juvf
  • Dec. 28, 2021, 11:56 p.m.

Deploying Qt and QML Applications on Linux and Windows

написал приложение, холоворд на qt виджетах, без qml. Из визарда QtCreator. Собрал кросскомпилятором. Нужно перенести на таргет. juvf@juvf-VirtualBox:~/qtWs/test/imx6/release$ ~/CQtDeploye…
AO

Qt/C++ - Lesson 023. Moving QGraphicsItem on QGraphicsScene with mouse help

А есть возможность передавать координаты классу, что-бы он рисвал, допустим линию?
Now discuss on the forum
MS

Октуда берется user?

Я все понял, спасибо большое за помощь)
AB

Sorting the added QML elements in the ListModel

I am writing an alarm clock in QML, I am required to sort the alarms in ascending order (depending on the date or time (if there are several alarms on the same day). I've done the sorting …
VK

Как получить ссылку на обьект присылающий сигнал через сигнал/слот?

Вот и ответ: Спасибо Александру за подсказку. void Core::onLogin(QString m_login) { Worker *m_worker = qobject_cast (sender()); hashLogin.insert(m_login, m_wor…
v

подтвердить значение в SpinBox

Мне необходимо подтвердить значение в SpinBox нажатием клавиши Enter и перевести фокус на другое поле. self.doubleSpinBox.returnPressed.co nnect(self.pressedKeys) def pressedKeys(sel…

Сортировка по дате и времени QSortFilterProxyModel QSqlRelationalTableModel

Добрый день. Наследуйте модель сортировки от QSortFilterProxyModel и переопределите метод QSortFilterProxyModel::lessThan таким образом, чтобы вы забирали через индексы дату и в…
About
Services
© EVILEG 2015-2021
Recommend hosting TIMEWEB