2

C++ でデータ構造を使用する方法の明確な例が [ここ] に示されています。1これは、リンクされたページに示されている例の 1 つです。

struct product {
  int weight;
  float price;
} ;

product apple;
product banana, melon;

しかし、このテンプレートに従わないコードがあり、理解できません。私が持っているものは次のとおりです。

struct result : mppp::data::table <
    row<semantics::user,       int>,
    row<semantics::exitdatum, spmm::date>,
    row<userid,                int>
> {};

構造体名の代わりにこのように複雑な構造を使用している理由と、それをどのように理解すべきかがわかりません。また、構造体の「本体」が空(「{」と「}」の間に何もない)の理由がわかりません。

誰か私にそれを説明してもらえますか?

追加した

回答ありがとうございます。今はもっと明確です。上記:の例の は継承を意味します。しかし、これらすべての構造が何を意味するのか: aaa<bbb>?

4

4 に答える 4

7

そのコードは継承を使用します。名前の後に a の基本クラスを指定し、structそれらを:文字で区切り、継承のタイプを指定するためpublicに 、protected、またはprivate修飾子のいずれかを使用publicすることができます (何も指定されていない場合のデフォルトです (*))。

struct A { }; // Fine

struct B : public A { }; // Also fine

struct C : B { }; // Fine again, `public` is assumed by default

struct D : A, B { }; // Also possible (multiple inheritance)

struct E { };

struct F : public E, private D { } // Qualifiers can differ

struct : A, F { } obj; // structs can be anonymous 

あなたの場合、基本クラスはテンプレートのインスタンスです:

template<typename T>
struct X { };

struct Y : X<A> { }; // Fine


(*)同じ修飾子が型の継承に適用されますが、デフォルトはその場合に想定されることにも言及する価値があります。classprivate

于 2013-02-26T15:28:51.243 に答える
2

テンプレートを継承していますが、独自のフィールドを追加していません。

C++ チュートリアルを読む必要があります。

于 2013-02-26T15:27:55.913 に答える
1

の場合と同様に継承classです。したがって、あなたの例では、struct result別のクラスまたは構造体を継承していますmppp::data::table < row<semantics::user, int>, row<semantics::exitdatum, spmm::date>, row<userid, int> >

于 2013-02-26T15:28:07.453 に答える
0

Astructは a と同等classです (デフォルトのアクセス レベル以外)。構造体またはクラスも同様に継承できます。mppp::data::table < row<semantics::user, int>, row<semantics::exitdatum, spmm::date>, row<userid, int>つまり、特殊なテンプレート クラスです。

于 2013-02-26T15:28:25.610 に答える