【发布时间】:2019-01-29 17:09:39
【问题描述】:
我在 C++ 中有一个问题,如何将 vector<Data> 隐式转换为 vector<IData>。
我对此的唯一答案是创建一个新的vector<IData> 并复制vector<Data> 的每个元素。
我想知道 C++ 中是否有优雅的解决方案来解决这种情况。
代码如下:
#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;
}
【问题讨论】:
-
Data和IData有什么关系?你打算用vector<IData>做什么? -
正方形数组不是矩形数组。此外,如果 IData 是一个接口,则意味着您应该使用 pointers 向量而不是实例化实例。也许您可以更新您的问题以显示 Data 和 IData 的声明。
-
具体代码很好,但将其包含在问题中而不是链接到它。本网站的规则中明确说明了这一点,如果您遵守这些规则,您更有可能获得帮助。
-
没关系,我们可以使用 IVehicle 和 Car / Skateboard ... 并且有一个函数(只有一个)能够获取 IVehicle 列表并避免使用函数 (car) (skateboard) ...
-
我有点怀疑你不能在这样的类定义中初始化私有成员变量。我还想知道您认为该过程将如何处理您的语句“int resultA = calculateDataSum(datasA);”下一行当你没有提供完成工作的机器时......
标签: c++ interface containers