Borrowed Interface Lifetime Safety

#include <iostream>
using namespace std;

class Driver {
public:
    virtual void transfer() = 0;
    virtual ~Driver() {}
};

class SpiDriver : public Driver {
public:
    void transfer() override {
        cout << "SPI transfer completed" << endl;
    }
};

class I2cDriver : public Driver {
public:
    void transfer() override {
        cout << "I2C transfer completed" << endl;
    }
};

// Framework borrows driver interface
Driver* g_driver = nullptr;

void registerDriver(Driver& driver) {
    g_driver = &driver;
}

void frameworkRun() {
    g_driver->transfer();
}

int main() {
    int mode;
    cin >> mode;

    if (mode == 0) {
        SpiDriver spi;
        registerDriver(spi);
        frameworkRun();
    } else {
        I2cDriver i2c;
        registerDriver(i2c);
        frameworkRun();
    }


    return 0;
}

Solving Approach

 

 

 

 

 

Upvote
Downvote
Loading...

Input

0

Expected Output

SPI transfer completed