迭代器是在此類似,使一個有趣的研究。
常量迭代器通常是「非常量」迭代器的基礎,並且您經常會發現const_cast<>()
或C風格強制轉換用於從子類中的帶有訪問器的基類中丟棄常量。
編輯: 評論是
我有一個拉鍊迭代器,其中常量一個從非const
繼承這通常會是錯的傳承結構(如果你說什麼我認爲你是),原因是孩子不應該比父母限制少。
說你有一些算法把你的拉鍊迭代器,一個const迭代器傳遞給非const的會是合適的呢?
,如果你有一個const容器,只能請它替一個const迭代器,但隨後的常量迭代從迭代器派生,所以你只需要使用父特徵有非const的訪問。
這是建議的傳承繼傳統的STL模型
class ConstIterator:
public std::_Bidit< myType, int, const myType *, const mType & >
{
reference operator*() const { return m_p; }
}
class Iterator : public ConstIterator
{
typedef ConstIterator _Mybase;
// overide the types provided by ConstIterator
typedef myType * pointer;
typedef myType & reference;
reference operator*() const
{
return ((reference)**(_Mybase *)this);
}
}
typedef std::reverse_iterator<ConstIterator> ConstReverseIterator;
typedef std::reverse_iterator<Iterator> ReverseIterator;
你不是第一個:http://stackoverflow.com/questions/856542/elegant-solution-to-duplicate-const-and-non-const-getters – 2010-10-28 21:13:27
謝謝直到,沒有出現我的搜索 – Steve 2010-10-28 21:26:48