struct继承并使用基类初始化

时间:2015-07-17 06:50:15

标签: c++ c++11

得到以下情况:

struct BaseInfo
{
  std::string name;
};

struct AddInfo : public BaseInfo
{
  std::string name2;
}

我想初始化AddInfo with a BaseInfo对象。

std::vector<BaseInfo> base; // objects already inserted
std::vector<AddInfo> add(base);// <-- failed 

AddInfo::name2应该是未初始化的,是否有一种简单的方法可以做到这一点? BaseInfo可以有很多成员,我不想写一个副本构造: - /

1 个答案:

答案 0 :(得分:2)

std::vector<BaseInfo>std::vector<AddInfo>是不相关的类型,因此您无法从另一个复制构造1。你可以做的是使用两个迭代器构造函数来构造元素

std::vector<AddInfo> add(base.begin(), base.end());

这将在AddInfo add对象BaseInfo中构建一个base. But that assumes an对象,can be constructed from a AddInfo BaseInfo b; AddInfo a(b); BaseInfo`,换句话说,这必须是可能的:

AddInfo

您可以通过为AddInfo(const BaseInfo& base) : BaseInfo(base) { } 提供合适的构造函数来实现此目的:

var cities = ["San Francisco", "London"];
eventsArray = JSON.parse(httpResponse.text)["events"];

loopEvents(eventsArray);

请参阅此working example