У меня есть модуль с родительским классом, который мы назовем Parent, и группа детей, которых мы назовем A, B, C. Все дочерние элементы должны иметь возможность отправлять данные в байтовом массиве, с той лишь разницей, что все они имеют различную структуру, которую они используют, и все реализуют свою собственную функцию для преобразования этой структуры данных в байтовый массив. Моя проблема в том, что я чувствую, что неправильно внедрил эту OOP систему, так как копирую и вставляю код и изменяю только одну вызываемую функцию, которую, я уверен, можно реализовать с помощью шаблонов, а также тот факт, что я чувствую, что родительский класс должен иметь функцию преобразования как чисто виртуальную функцию; однако, я не могу найти способ сделать это чисто. Я вставлю пример кода, похожего на тот, что у меня ниже:
class Parent
{
virtual void fillTxBuf() = 0;
void sendData()
{
//This fills txBuf with the data specific to the class
this->fillTxBuf();
send(txBuf);
}
uint8_t txBuf[20];
}
class A final: public Parent
{
void fillTxBuf() override
{
this->transformStructToBytes(this->aDataStruct, this->txBuf);
//Some other code that is the same in every "fillTxBuf" function
}
//I want this function to be an overrride as every child should implement this
void transformStructToBytes(A_DATA, uint8_t*)
{
//Implementation goes here and is different for each child
}
A_DATA aDataStruct;
}
class B final: public Parent
{
void fillTxBuf() override
{
this->transformStructToBytes(this->bDataStruct, this->txBuf);
//Some other code that is the same in every "fillTxBuf" function
}
//I want this function to be an overrride as every child should implement this
void transformStructToBytes(B_DATA, uint8_t*)
{
//Implementation goes here and is different for each child
}
B_DATA bDataStruct;
}
Как вы можете видеть, здесь много кода, который копируется и вставляется без необходимости (я думаю), и я был интересно, может ли кто-нибудь помочь мне устранить эту избыточность и, возможно, дать подсказки о том, как они это структурируют. Заранее спасибо за помощь, я просто пытаюсь улучшить свое программирование!