1

私は、非常に関連性の高い 2 つのクラスの実装にプライベート継承を使用しています。はusing Base::X;非常に便利でエレガントです。ただし、基本クラスの swap 関数を再利用するための洗練された解決策が見つからないようです。

class A
{
public:
   iterator       begin();
   const_iterator begin() const;
   const_iterator cbegin() const;

   A clone();

   void swap( A& other );
};

class Const_A : private A
{
public:
   // I think using A::A; will be valid in C++0x
   Const_A( const A& copy) : A(copy) { }

   // very elegant, concise, meaningful
   using A::cbegin;

   // I'd love to write using A::begin;, but I only want the const overload
   // this is just forwarding to the const overload, still elegant
   const_iterator begin() const
   { return A::begin(); }

   // A little more work than just forwarding the function but still uber simple
   Const_A clone()
   { return Const_A(A::clone()); }

   // What should I do here?
   void swap( Const_A& other )
   { /* ??? */ }
};

これまでのところ、私が思いつくことができる唯一のことは、A::swapの定義をConst_A::swapの定義にコピーアンドペーストすることです。

プライベート基本クラスのスワップを再利用するエレガントなソリューションはありますか?

私がここでやろうとしていることを実装するためのよりクリーンな方法はありますか (クラスの const ラッパー)?

4

2 に答える 2

5
于 2010-10-27T18:34:21.473 に答える
3

残りのメソッドと同様に実行できます。

void Const_A::swap( Const_A& other ) {
   A::swap(other);
   // here any specifics
}
于 2010-10-27T18:36:10.770 に答える