Advertisement
ytxmobile

C++ pimpl example

Sep 4th, 2021 (edited)
1,421
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.76 KB | None | 0 0
  1. // PIMPL
  2. #include <iostream>
  3. #include <string>
  4.  
  5. template <typename T>
  6. class Pimpl {
  7. protected:
  8.     T *const impl;
  9. public:
  10.     Pimpl();
  11.     ~Pimpl();
  12. };
  13.  
  14. template <typename T>
  15. Pimpl<T>::Pimpl(): impl(new T()) {}
  16.  
  17. template <typename T>
  18. Pimpl<T>::~Pimpl() {
  19.     delete impl;
  20. }
  21.  
  22. class Aimpl;
  23.  
  24. class A: public Pimpl<Aimpl> {
  25. public:
  26.     void inc();
  27.     void dec();
  28.     friend std::ostream& operator<<(std::ostream& os, const A& a);
  29. };
  30.  
  31. class Aimpl {
  32. public:
  33.     int i = 0;
  34. };
  35.  
  36. void A::inc() {
  37.     ++impl->i;
  38. }
  39.  
  40. void A::dec() {
  41.     --impl->i;
  42. }
  43.  
  44. std::ostream& operator<<(std::ostream& os, const A& a) {
  45.     os << a.impl->i << "\n";
  46.     return os;
  47. }
  48.  
  49. int main()
  50. {
  51.   A a;
  52.   a.inc();
  53.   std::cout << a;
  54.   a.dec();
  55.   std::cout << a;
  56. }
  57.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement