[英]In a C++ range-based for loop, can begin() return a reference to a non-copyable iterator?
[英]C++ : Return an range based for loop iterator with inheritate objects
我有一個 class Vertex
,我想以特定的方式迭代它的鄰居,例如:
Vertex my_v;
for(const Vertex& v : my_v.get_neighbors_closer_than(10.0)
/* Some code on v*/
// And like this
for(const Vertex& v : my_v.get_neighbors_by_trigonometric_order()
/* Some code on v*/
為此,我創建了自定義容器和迭代器,它們以我想要的方式進行迭代。 然后,我需要創建一個繼承class DlnVertex: public Vertex
,它在大多數情況下都具有相同的迭代函數行為。 因此,我想在我的DlnVertex
class 中寫入:
DlnVertex my_dv;
for(const DlnVertex& dv : my_dv.get_neighbors_closer_than(10.0))
/* Some code on dv*/
for(const DlnVertex& dv : get_neighbors_by_trigonometric_order())
/* Some code on dv*/
我的自定義迭代器返回一個Vertex&
,我需要在我的 class DlnVertex
中使用DlnVertex
屬性,而且我不知道如何避免為我的繼承 class 重寫迭代器,因為它會有相同的行為。 有什么建議、模式或代碼示例可以幫助我嗎?
我找到了一種方法:為我的函數的返回類型模板我的基礎 class:
template<typename VertexType>
class Vertex
{
/* ... */
MyContainer<VertexType> get_neighbors_closer_than(double rad);
}
然后通過將自己設置為模板類型來設計我的派生 class:
class DlnVertex : public Vertex<DlnVertex>{/* ... */}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.