2

请假设一个资源管理类,比方说

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

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

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

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

4

2 回答 2

3

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

struct NameMobile : Name, Mobile {};

聚合 NameMobile成为一个新类型NameMobile(包括它们的所有成员,递归地)。由于您使用struct关键字声明它,因此public修饰符(之前NameMobile)是隐含的,因此可以省略。

于 2012-04-27T15:13:03.383 回答
1

是的。组合是我最常用的:

struct NameMobile
{
  ...
private:
  Name n_name;
  Mobile n_mobile;
};
于 2012-04-27T15:55:05.083 回答