我在使用私有繼承實現兩個非常相關的類。 using Base::X;
是非常有用和優雅。但是,我似乎無法找到重用基類交換功能的優雅解決方案。私有繼承和交換
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
的定義,YUCK!
是否有一個優雅的解決方案來重用私有基類的交換?
是否有更乾淨的方式來實現我在這裏要做的事情(一個類的常量包裝)?
您的意思是返回'iterator'(!而不是'const_iterator')爲'begin'?否則,我沒有看到有兩個函數的意義,並重寫派生類中的函數。 – 2010-10-27 18:36:57
'std :: vector <> :: begin() - > iterator'和'std :: vector <> :: begin()const - > const_iterator'。這正是我所做的,我的類具有類似的語義。我誤解你的問題嗎? – 2010-10-27 18:54:00
明白了,你是對的。但是,那麼cbegin方法是什麼呢? – 2010-10-27 18:55:57