C++ erlaubt eleganteres DI durch Vererbung und Polymorphie.
Beispiel: Interface für ein Logger-Modul
// ILogger.h
class ILogger {
public:
virtual void log(const char* message) = 0;
virtual ~ILogger() {}
};
Implementierung für UART
// UartLogger.cpp
#include "ILogger.h"
#include "usart_driver.h"
class UartLogger : public ILogger {
public:
void log(const char* message) override {
usart_send_string(message);
}
};
Anwendung via Konstruktor-Injektion
// Application.cpp
class App {
private:
ILogger& logger;
public:
App(ILogger& loggerRef) : logger(loggerRef) {}
void run() {
logger.log("App gestartet\n");
}
};
In main.cpp
int main() {
UartLogger uartLogger;
App app(uartLogger);
app.run();
}
Vorteil: Der Logger kann zur Testzeit durch eine Mock- oder RAM-basierte Implementierung ersetzt werden.