2011-01-06 9 views
0

私はstd::pairが2つの異なる/同じ日付の種類を結合することを理解します。下の図のように使用すると、それは何を言いますか?この場合、何が役に立ちますか?このコード行は何を推測しますか?

class A : public B<std::pair<long double, long double>> 

ありがとうございます。

+4

あなたがC++ 0xのを使用している場合を除き、 '>>が'貪欲ビットを意味するために解析されているので、コンパイルされないこと:pairと使用、たとえば、float代わりのlong double、同じクラス内のすべての右にシフト。また、あなたが何を求めているのか分かりません。これは、 'A'がパラメータとして' std :: pair 'でインスタンス化されたいくつかのテンプレート' B'を公に拡張していることを意味します。 –

+2

トラヴィスが言ったこと。 "そして、この場合は何が役に立ちますか?" - >他の情報がないときはどうすれば答えられますか?その質問には少なくとも文脈が必要です! – rubenvb

+0

基本的なC++テンプレートの構文を理解すると、質問は意味をなさない(Bとは何ですか?) – Suma

答えて

3

それはBtemplate classで、long doublespairsと連携Bの専門Aderives fromということを推測します。

このパターンの1つの使用方法は、一般的なcomplex numberの実装です。そのシナリオでは、long double(時にはそれ以上floatまたはプレーンdoubleより正確な、しかし大きな)に基づいて、一般的なcomplexタイプからクラスを派生することになります。コンテナに特化

class PreciseComplex 
: public GenericComplex<std::pair<long double, long double> > 
{ 
}; 

は、独自の実装を提供することができます

class FastComplex 
: public GenericComplex<YourFasterPair<float, float> > 
{ 
}; 
+0

'>'文字の間のスペースに注意してください。これは、 '>> '演算子と区別するために必要です。 –

1

はAとB

例の背後にある意味を知らず、何も特定の言うことはできません:あなたはdouble値のペアのベクトルをしたい考えてみましょう。あなたはそれのための構造を作ることができます(もしペアがあなたのコードに意味的な意味を持っていれば)、あるいは単にstd::vector<std::pair<long double, long double> >と定義してください。 (非一般的な方法で

template<class T> 
class MyVector : public std::vector<T> { 
    // ... 
}; 
typedef MyVector<std::pair<long double, long double> > MyVectorOfPairsOfDoubles; 

または多分:1は(私はそれをお勧めしていないことを...何らかの理由で)このstd::vectorクラスを拡張したい場合は今

、一つはとしてそれを定義します私はより悪いと感じる):

class MyVectorOfPairsOfDoubles : public std::vector<std::pair<long double, long double> > 
{ 
    // ... 
}; 

これはあなたが提供する例のようです。

しかし、これは単なる例です...あなたがそれを詳しく説明するまでは、あなたが言及している特定のデザインに何が良いのか、何が間違っているのかを伝えることはできません(たとえばAとBは何ですか?

関連する問題