fork(2) download
  1. struct data
  2. {
  3. char c[100];
  4. };
  5.  
  6. class view
  7. {
  8. public:
  9. view(data d) :
  10. first(&d.c[0]),
  11. last(&d.c[100])
  12. {
  13.  
  14. }
  15. private:
  16. char * first;
  17. char * last;
  18. };
  19.  
  20. class data_interface
  21. {
  22. virtual view get_view() = 0;
  23. };
  24.  
  25. class base_owns_data : public data_interface
  26. {
  27. public:
  28. view get_view() override
  29. {
  30. return view(d);
  31. }
  32.  
  33. private:
  34. data d;
  35. };
  36.  
  37. view some_process(base_owns_data *b)
  38. {
  39. auto working_view = b->base_owns_data::get_view();
  40. // Do a bunch of things to filter the view
  41. return working_view;
  42. }
  43.  
  44. class derived_owns_data : public base_owns_data
  45. {
  46. public:
  47. base_owns_data * as_base()
  48. {
  49. return this;
  50. }
  51.  
  52. view get_view() override
  53. {
  54. return some_process(this->as_base());
  55. }
  56. };
  57.  
  58.  
  59. int main() {
  60. derived_owns_data d;
  61. d.get_view();
  62. return 0;
  63. }
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
Standard output is empty