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;
}
 
     
     
    