Встроенное программирование и ООП не лучшие друзья, особенно в очень ограниченной системе, такой как Arduino. Ответ на оба вопроса в классическом ООП - полиморфизм (с виртуальными функциями). Вы можете создать интерфейс для classA
и реализовать получение данных различными способами в каждом производном классе.
class DataGatherer {
public:
virtual char* getData() = 0;
virtual ~IClassA () = default;
};
class SerialPortDataGatherer: public DataGatherer {
public:
char* getData() override {
//any code here
}
};
Для решения с меньшими затратами ресурсов вы можете довольно легко сопоставить параметр с функцией (например, с помощью простого оператора switch-case
), если функции будут иметь общий формат (например, они возвращают массив данных или все, что вам действительно нужно) )
enum DataSources {
SerialPort,
SPI
}
char* getDataFromSerialPort() {
// logic here
}
char* getDataFromSPI() {
// logic here
}
char* getData(DataSources source) {
switch(source) {
case SerialPort:
return getDataFromSerialPort();
case SPI:
return getDataFromSPI();
}
Обратите внимание, что первая версия, вероятно, потребует также переключателя в некоторый момент (где вы принимаете решение, какой тип ввода вы должны использовать).