fork download
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. class GenericData
  6. {
  7. };
  8.  
  9. class Data1 : public GenericData
  10. {
  11. };
  12.  
  13. class Data2 : public GenericData
  14. {
  15. };
  16.  
  17. class GenericComp
  18. {
  19. public:
  20. void process()
  21. {
  22. // inputs are check to make sure there number and order is correct
  23. // Use them to automatically call the correct function
  24. // What here ?
  25. }
  26. vector<GenericData> inputs;
  27. };
  28.  
  29. class Comp1 : public GenericComp
  30. {
  31. public:
  32. void compute(Data1 input1, Data1 input2) { cout << "Comp1::compute(Data1 input1, Data1 input2)" << endl; }
  33. void compute(Data2 input1, Data2 input2) { cout << "Comp1::compute(Data2 input1, Data2 input2)" << endl; }
  34. void compute(Data1 input1, Data2 input2) { cout << "Comp1::compute(Data1 input1, Data2 input2)" << endl; }
  35. };
  36.  
  37. class Comp2 : public GenericComp
  38. {
  39. public:
  40. void compute(Data1 input1) { cout << "Comp2::compute(Data1 input1)" << endl; }
  41. void compute(Data2 input1) { cout << "Comp2::compute(Data2 input1)" << endl; }
  42. };
  43.  
  44. int main() {
  45. Data1 d1; Data2 d2;
  46. Comp1 c1; Comp2 c2;
  47.  
  48. c1.inputs = { d1, d1 };
  49. c1.process(); // "Comp1::compute(Data1 input1, Data1 input2)"
  50.  
  51. c1.inputs = { d2, d2 };
  52. c1.process(); // "Comp1::compute(Data2 input1, Data2 input2)"
  53.  
  54. c1.inputs = { d1, d2 };
  55. c1.process(); // "Comp1::compute(Data1 input1, Data2 input2)"
  56.  
  57. vector<GenericComp> comps = { c1, c2 };
  58. for (comp : comps)
  59. {
  60. comp.process();
  61. }
  62. return 0;
  63. }
Success #stdin #stdout 0s 3408KB
stdin
Standard input is empty
stdout
Standard output is empty