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

今私の質問は:既存の構造に基づいて新しい構造を作成する方法はありますか?たとえば、「名前」と「モバイル」を組み合わせて、ユーザーが独自のカスタムAddressFieldsタイプを作成できるようにしたい。

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

そのため、AddressBookに接続できます。ただし、既存の構造でのみ。

4

2 に答える 2

3

確かにあります。これは多重継承と呼ばれます。

struct NameMobile : Name, Mobile {};

これは集約 NameMobileれ、新しいタイプになりNameMobileます(すべてのメンバーを再帰的に含みます)。structキーワードを使用して宣言しているため、public修飾子(beforeNameおよびMobile)が暗黙的に示され、省略できます。

于 2012-04-27T15:13:03.383 に答える
1

はい。作曲は私が最も頻繁に使用するものです:

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