[英]Cannot convert 'this' pointer from 'std::stack<_Ty>' to 'std::stack<_Ty> &'
[英]Is there a way to convert a std::stack<pointer> to std::stack<const pointer>?
這是一些背景。 我有一個二叉樹迭代器(按順序排列)。 它通過將指針推入堆棧頂部來跟蹤其當前節點的父節點。 現在,我還需要互操作性 ,即將iterator
為const_iterator
的能力。 但是iterator
具有std::stack<pointer>
而const_iterator
具有std::stack<const pointer>
。
也可以理解實現相同效果的任何其他方式。
目前,我已經完全放棄了使用std::stack
的想法。 我正在使用std::deque
和push_back()
+ pop_back()
+ back()
。 為了將std::deque<pointer>
轉換為std::deque<const pointer>
,我只是使用std::copy( std::begin(ptrDeque), std::end(ptrDeque), std::begin(constPtrDeque) );
並且這種設置很簡單 。
出於好奇,我仍然想回答這個問題。
只需在您的const_iterator中保留一個非const堆棧即可。 它是一個私有數據成員,因此並不重要。
確保您的const_iterator實現未通過指針進行修改。 再次確定,請始終使用const_iterator自己的運算符*(),該運算符應返回const引用。 (實際上,我認為您不需要過多地取消引用指針,但是如果您這樣做了,那就應該這樣做。)
在C ++中,沒有簡單的方法可以進行此類轉換。 看起來強制轉換就足夠了,但這種方式行不通。
C ++方式是隱藏關鍵的數據結構並管理不同API的訪問。 是的,這意味着在一個點上,你有較少的const
比預期的。 但這就是隱藏的目的。 只要它僅在實現中,就沒有其他人可以濫用它。
你可以得到相當接近所需的解決方案,如果你封裝你堆/雙端隊列/不管[我猜vector
將suffient]在一個專用的類。 在內部,它保留非const指針,但是所有const
方法都返回const pointer
s。 如果您的迭代器僅通過getter進行訪問,則應該不可能意外地繞過const
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.