私は、非常に関連性の高い 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 ラッパー)?