结构继承和初始化基类

struct inherit and initialize with base class

本文关键字:基类 初始化 继承 结构      更新时间:2023-10-16

得到以下场景:

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可以有很多成员,我不想写一个复制构造:-/

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

元素进行构造。
std::vector<AddInfo> add(base.begin(), base.end());

这将从base. But that assumes an AddInfo can be constructed from a BaseInfo '中的每个BaseInfo对象在add中构造一个AddInfo对象,换句话说,这必须是可能的:

BaseInfo b;
AddInfo a(b);

你可以通过给AddInfo一个合适的构造函数来实现这一点:

AddInfo(const BaseInfo& base) : BaseInfo(base) {  }