请假设资源管理课程,假设
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。但只有现有的结构。
答案 0 :(得分:2)
肯定有。它被称为多重继承:
struct NameMobile : Name, Mobile {};
此将 Name
和Mobile
聚合到新类型NameMobile
(包括其所有成员,递归)。由于您使用struct
关键字对其进行声明,因此隐含了public
修饰符(Name
和Mobile
之前),因此可以省略。
答案 1 :(得分:1)
是。构图是我最常使用的:
struct NameMobile
{
...
private:
Name n_name;
Mobile n_mobile;
};