簡體   English   中英

C++:返回一個基於范圍的 for 循環迭代器,帶有繼承對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM