Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // car-interface.h ///////////////////////////////////////////////////////
- class CarInterface
- {
- public:
- virtual void drive() = 0;
- }
- // car-impl.h ///////////////////////////////////////////////////////
- #include "car-interface.h"
- #include "car-export.h"
- #include <memory>
- class CarImpl : public CarInterface
- {
- public:
- void drive() final;
- }
- extern "C" CAR_EXPORT CarInterface* createCarImpl();
- extern "C" CAR_EXPORT void releaseCarImpl(CarInterface* car);
- using CarPtr = std::unique_ptr<CarInterface, decltype(&releaseCarImpl)>;
- inline decltype(auto) createCar()
- {
- return CarPtr(createCarImpl(), releaseCarImpl);
- };
- // car-impl.cpp ///////////////////////////////////////////////////////
- #include "car-impl.h"
- void CarImpl::drive()
- {
- // driving stuff
- }
- CarInterface* createCarImpl()
- {
- return new CarImpl();
- }
- void releaseCarImpl(CarInterface* car)
- {
- delete car;
- }
- // main.cpp ////////////////////////////////////////////////////////////
- int main()
- {
- CarPtr car = createCar();
- car->drive();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement