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

时间:2012-04-27 14:47:30

标签: c++ templates struct

请假设资源管理课程,假设

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

,其中包含AddressBookEntry对象的列表。 AddressBookEntry基本上应该包含一些默认成员变量以及模板化AddressFields描述的可自定义字段变量:

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
};

现在我的问题是:有没有办法根据现有结构创建新结构?我希望允许用户通过将“名称”和“移动”组合到

来创建他/她自己的自定义AddressFields类型
struct NameMobile
{
  std::string n_first;
  std::string n_last;
  std::string m_number;
};

所以它可以插入AddressBook。但只有现有的结构。

2 个答案:

答案 0 :(得分:2)

肯定有。它被称为多重继承:

struct NameMobile : Name, Mobile {};

NameMobile聚合到新类型NameMobile(包括其所有成员,递归)。由于您使用struct关键字对其进行声明,因此隐含了public修饰符(NameMobile之前),因此可以省略。

答案 1 :(得分:1)

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

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