fork download
  1. #include <vector>
  2.  
  3. template <typename T> class Database
  4. {
  5. public:
  6. // retrieve size of the dataset
  7. int Size() const { return AsDerived().list_.size(); }
  8. private:
  9. const T& AsDerived() const { return static_cast<const T&>(*this); }
  10. T& AsDerived() { return static_cast<T&>(*this); }
  11. };
  12.  
  13. class Object1 {};
  14.  
  15. class DerivedDatabase : public Database<DerivedDatabase>
  16. {
  17. friend class Database<DerivedDatabase>;
  18. private:
  19. // list of dataset objects
  20. std::vector<Object1> list_;
  21. };
  22.  
  23. class Object2 {};
  24.  
  25. class DerivedDatabase2 : public Database<DerivedDatabase2>
  26. {
  27. friend class Database<DerivedDatabase2>;
  28. private:
  29. // list of dataset objects
  30. std::vector<Object2> list_;
  31. };
  32.  
  33. int main()
  34. {
  35. DerivedDatabase d1;
  36. d1.Size();
  37. DerivedDatabase d2;
  38. d2.Size();
  39. }
  40.  
Success #stdin #stdout 0s 3336KB
stdin
Standard input is empty
stdout
Standard output is empty