Advertisement
Guest User

Untitled

a guest
May 24th, 2017
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.05 KB | None | 0 0
  1. // car-interface.h ///////////////////////////////////////////////////////
  2.  
  3. class CarInterface
  4. {
  5. public:
  6.     virtual void drive() = 0;
  7. }
  8.  
  9. // car-impl.h ///////////////////////////////////////////////////////
  10.  
  11. #include "car-interface.h"
  12. #include "car-export.h"
  13.  
  14. #include <memory>
  15.  
  16. class CarImpl : public CarInterface
  17. {
  18. public:
  19.     void drive() final;
  20. }
  21.  
  22. extern "C" CAR_EXPORT CarInterface* createCarImpl();
  23. extern "C" CAR_EXPORT void releaseCarImpl(CarInterface* car);
  24.  
  25. using CarPtr = std::unique_ptr<CarInterface, decltype(&releaseCarImpl)>;
  26.  
  27. inline decltype(auto) createCar()
  28. {
  29.     return CarPtr(createCarImpl(), releaseCarImpl);
  30. };
  31.  
  32. // car-impl.cpp ///////////////////////////////////////////////////////
  33. #include "car-impl.h"
  34.  
  35. void CarImpl::drive()
  36. {
  37.     // driving stuff
  38. }
  39.  
  40. CarInterface* createCarImpl()
  41. {
  42.     return new CarImpl();
  43. }
  44.  
  45. void releaseCarImpl(CarInterface* car)
  46. {
  47.     delete car;
  48. }
  49.  
  50. // main.cpp ////////////////////////////////////////////////////////////
  51.  
  52. int main()
  53. {
  54. CarPtr car = createCar();
  55.  
  56. car->drive();
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement