将多个基结构组合到自定义类型



假设一个资源管理类,假设

template<typename AddressFields>
class AddressBook 
{ 
  std::list<AddressBookEntry<AddressFields> > book; 
};

其中包含地址簿条目对象的列表。AddressBookEntry基本上应该由几个默认成员变量和一个由模板化地址字段描述的可自定义字段变量组成:

template<typename AddressFields>
struct AddressBookEntry
{
  int id;
  AddressFields fields;
};

我想提供一些基本结构,例如

struct Name 
{
  std::string n_first;
  std::string n_last;
};
struct Address
{
  std::string street;
  int zip;
  std::string city;
};
struct Mobile
{
  std::string m_number
};

现在我的问题是:有没有办法在现有结构的基础上创建新结构?我想允许用户通过将"名称"和"移动"组合来创建他/她自己的自定义地址字段类型

struct NameMobile
{
  std::string n_first;
  std::string n_last;
  std::string m_number;
};

所以它可以插入地址簿。但仅限于已经存在的结构。

肯定有。这称为多重继承:

struct NameMobile : Name, Mobile {};

这会Name聚合Mobile聚合到一个新的类型NameMobile(以递归方式包括其所有成员)。由于您是使用 struct 关键字声明的,因此public修饰符(在 NameMobile 之前)是隐含的,因此可以省略。

是的。构图是我最常使用的:

struct NameMobile
{
  ...
private:
  Name n_name;
  Mobile n_mobile;
};

最新更新