私は2つのクラスTreeNodeRange(Tree & t)
とVertexNodeRange(Vertex & v)
を持っています。最初のルーピングはツリー内のすべてのノードをループするのと同じですが、2番目のループは指定された頂点の子ノードのすべてのノードをループするのと同じです。C++可変型条件式
ユーザー入力に応じてループします。
const bool only_subtree = to_bool(argv[1]);
typedef std::conditional<only_subtree, VertexNodeRange,TreeNodeRange>::type NodeRange;
問題は、私はタイプNodeRangeのオブジェクトを定義することができますどのように表示されていないということになりましたです。vから始まるツリー全体または唯一のサブツリー上
私はこのような何かを試してみました。私が試した:
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++でこれを行う方法はありますか?
template<typename AnyNodeRange>
void processChildNodes(AnyNodeRange& anyNodeRange)
{
for(auto node : anyNodeRange){
...
}
}
とこのようにそれを使用します:あなたはテンプレート関数を作ることができます
乾杯
多形の仕事のように聞こえます。 – HolyBlackCat
これらのクラスは私が直接アクセスできない外部ライブラリで定義されていると言わざるを得ないでしょう。 – Lxndr
それから多形ラッパーを作ってください。 – HolyBlackCat