得到以下情况:
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可以有很多成员,我不想写一个副本构造: - /
答案 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。