我有兩個類TreeNodeRange(Tree & t)
和VertexNodeRange(Vertex & v)
。循環遍歷第一個循環等於遍歷樹中的所有節點,而循環遍歷第二個循環遍歷子節點到給定頂點的所有節點循環現在,根據用戶輸入,我希望循環。在C++變量類型條件
始於訴整棵樹或僅子樹我想是這樣的:
const bool only_subtree = to_bool(argv[1]);
typedef std::conditional<only_subtree, VertexNodeRange,TreeNodeRange>::type NodeRange;
現在的問題是,我不知道怎樣才能定義類型NodeRange的對象。我想:
Vertex v = tree.get_vertex_by_id(17);
NodeRange get_range = [&](const bool only_subtree, Vertex & v)
{
if(only_subtree) return NodeRange(v);
return NodeRange(tree);
};
for(auto node : get_range(only_subtree, v)){
...
}
編譯器似乎並不喜歡這一點,因爲構造NodeRange必須調用與任一頂點或樹這當然沒有。
有沒有辦法在C++中做到這一點?
乾杯
聽起來像多態的工作。 – HolyBlackCat
我應該說,這些類是在我沒有直接訪問的外部庫中定義的。 – Lxndr
然後爲它們製作多態包裝? – HolyBlackCat