I have a problem in C++, how to convert a vector<Data>
into an vector<IData>
implicitly.
the only answer i have about it is to create a new vector<IData>
and copy each element of the vector<Data>
.
I would like to know if there are elegant solutions in C++ to resolve this type of case.
Here is the code:
#include <iostream>
#include <vector>
using namespace std;
class IData
{
public:
virtual int getNumber() = 0;
};
class DataA : public IData
{
public:
DataA(int value) : _value(value) { }
virtual int getNumber() override
{
return _value;
}
private:
int _value = 0;
};
class DataB : public IData
{
public:
DataB(int value) : _value(value) { }
virtual int getNumber() override
{
return _value;
}
private:
int _value = 0;
};
int calculateDataSum(vector<IData> datas)
{
int sum;
for (int i = 0; i < datas.size(); i++)
{
sum += datas[i].getNumber();
}
return sum;
}
int main()
{
DataA dA0(10);
DataA dA1(20);
DataB dB0(100);
DataB dB1(200);
vector<DataA> datasA;
datasA.push_back(dA0);
datasA.push_back(dA1);
vector<DataB> datasB;
datasB.push_back(dB0);
datasB.push_back(dB1);
int resultA = calculateDataSum(datasA);
int resultB = calculateDataSum(datasB);
cout << resultA << endl;
cout << resultB << endl;
return 0;
}