問題タブ [generic-lambda]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - c++、構造のようなツリーをトラバースする汎用再帰テンプレート関数
構造体ごとに毎回再帰関数をグローバルに定義せずに、一般的な再帰関数を使用してツリーのような構造をトラバースしようとしました。
CAでツリーを作成します
このマクロを使用してこの構造をトラバースすることができ、これは他のツリーのような構造でも機能します。
読みにくいですが、正常に動作します。このように CA のルートをたどります。
このように、他の構造で動作します
MyData のルートをたどる
ここに大きな問題があります。
ここでのラムダ式は再帰的な形式で定義されているため、オブジェクトとそのコンテナーの型を指定する必要があります。
マクロはテンプレート関数のような型を推測できますか? または、他の方法でこれを達成する必要がありますか?
c++ - std::function は、渡す型が異なる (ref による、val による) 引数を持つラムダ関数を受け入れます。
次のコードを見てください
コード例では、異なるタイプのラムダが割り当てられた 1 つの std::function があります。
関数の署名が一致するため、ラムダ 3 は理解できます。
ただし、ラムダ 1 は別の関数シグネチャを作成しますが、正しくコンパイルされます。
Lambda 2 は (ref ではなく val によって) 間違った auto 型を推測し、正しくコンパイルします。
これは機能ですか、それともバグですか? 関数クラス/ラムダと自動型推論に関して、私は何を誤解していますか?
アップデート:
回答 Handy999 に感謝しますが、なぜ次のコードがコンパイルされないのですか?