#include <iostream>
#include <vector>
using namespace std;
class GenericData
{
};
class Data1 : public GenericData
{
};
class Data2 : public GenericData
{
};
class GenericComp
{
public:
void process()
{
// inputs are check to make sure there number and order is correct
// Use them to automatically call the correct function
// What here ?
}
vector<GenericData> inputs;
};
class Comp1 : public GenericComp
{
public:
void compute(Data1 input1, Data1 input2) { cout << "Comp1::compute(Data1 input1, Data1 input2)" << endl; }
void compute(Data2 input1, Data2 input2) { cout << "Comp1::compute(Data2 input1, Data2 input2)" << endl; }
void compute(Data1 input1, Data2 input2) { cout << "Comp1::compute(Data1 input1, Data2 input2)" << endl; }
};
class Comp2 : public GenericComp
{
public:
void compute(Data1 input1) { cout << "Comp2::compute(Data1 input1)" << endl; }
void compute(Data2 input1) { cout << "Comp2::compute(Data2 input1)" << endl; }
};
int main() {
Data1 d1; Data2 d2;
Comp1 c1; Comp2 c2;
c1.inputs = { d1, d1 };
c1.process(); // "Comp1::compute(Data1 input1, Data1 input2)"
c1.inputs = { d2, d2 };
c1.process(); // "Comp1::compute(Data2 input1, Data2 input2)"
c1.inputs = { d1, d2 };
c1.process(); // "Comp1::compute(Data1 input1, Data2 input2)"
vector<GenericComp> comps = { c1, c2 };
for (comp : comps)
{
comp.process();
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgR2VuZXJpY0RhdGEKewp9OwoKY2xhc3MgRGF0YTEgOiBwdWJsaWMgR2VuZXJpY0RhdGEKewp9OwoKY2xhc3MgRGF0YTIgOiBwdWJsaWMgR2VuZXJpY0RhdGEKewp9OwoKY2xhc3MgR2VuZXJpY0NvbXAKewpwdWJsaWM6Cgl2b2lkIHByb2Nlc3MoKQoJewoJCS8vIGlucHV0cyBhcmUgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIG51bWJlciBhbmQgb3JkZXIgaXMgY29ycmVjdAoJCS8vIFVzZSB0aGVtIHRvIGF1dG9tYXRpY2FsbHkgY2FsbCB0aGUgY29ycmVjdCBmdW5jdGlvbgoJCS8vIFdoYXQgaGVyZSA/Cgl9Cgl2ZWN0b3I8R2VuZXJpY0RhdGE+IGlucHV0czsKfTsKCmNsYXNzIENvbXAxIDogcHVibGljIEdlbmVyaWNDb21wCnsKcHVibGljOgoJdm9pZCBjb21wdXRlKERhdGExIGlucHV0MSwgRGF0YTEgaW5wdXQyKSB7IGNvdXQgPDwgIkNvbXAxOjpjb21wdXRlKERhdGExIGlucHV0MSwgRGF0YTEgaW5wdXQyKSIgPDwgZW5kbDsgfQoJdm9pZCBjb21wdXRlKERhdGEyIGlucHV0MSwgRGF0YTIgaW5wdXQyKSB7IGNvdXQgPDwgIkNvbXAxOjpjb21wdXRlKERhdGEyIGlucHV0MSwgRGF0YTIgaW5wdXQyKSIgPDwgZW5kbDsgfQoJdm9pZCBjb21wdXRlKERhdGExIGlucHV0MSwgRGF0YTIgaW5wdXQyKSB7IGNvdXQgPDwgIkNvbXAxOjpjb21wdXRlKERhdGExIGlucHV0MSwgRGF0YTIgaW5wdXQyKSIgPDwgZW5kbDsgfQp9OwoKY2xhc3MgQ29tcDIgOiBwdWJsaWMgR2VuZXJpY0NvbXAKewpwdWJsaWM6Cgl2b2lkIGNvbXB1dGUoRGF0YTEgaW5wdXQxKSB7IGNvdXQgPDwgIkNvbXAyOjpjb21wdXRlKERhdGExIGlucHV0MSkiIDw8IGVuZGw7IH0KCXZvaWQgY29tcHV0ZShEYXRhMiBpbnB1dDEpIHsgY291dCA8PCAiQ29tcDI6OmNvbXB1dGUoRGF0YTIgaW5wdXQxKSIgPDwgZW5kbDsgfQp9OwoKaW50IG1haW4oKSB7CglEYXRhMSBkMTsJRGF0YTIgZDI7CglDb21wMSBjMTsgQ29tcDIgYzI7CgkKCWMxLmlucHV0cyA9IHsgZDEsIGQxIH07CgljMS5wcm9jZXNzKCk7IAkJCS8vICJDb21wMTo6Y29tcHV0ZShEYXRhMSBpbnB1dDEsIERhdGExIGlucHV0MikiCgkKCWMxLmlucHV0cyA9IHsgZDIsIGQyIH07CgljMS5wcm9jZXNzKCk7IAkJCS8vICJDb21wMTo6Y29tcHV0ZShEYXRhMiBpbnB1dDEsIERhdGEyIGlucHV0MikiCgkKCWMxLmlucHV0cyA9IHsgZDEsIGQyIH07CgljMS5wcm9jZXNzKCk7IAkJCS8vICJDb21wMTo6Y29tcHV0ZShEYXRhMSBpbnB1dDEsIERhdGEyIGlucHV0MikiCgoJdmVjdG9yPEdlbmVyaWNDb21wPiBjb21wcyA9IHsgYzEsIGMyIH07Cglmb3IgKGNvbXAgOiBjb21wcykKCXsKCQljb21wLnByb2Nlc3MoKTsKCX0KCXJldHVybiAwOwp9