問題タブ [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.

0 投票する
3 に答える
446 参照

c++ - c++、構造のようなツリーをトラバースする汎用再帰テンプレート関数

構造体ごとに毎回再帰関数をグローバルに定義せずに、一般的な再帰関数を使用してツリーのような構造をトラバースしようとしました。

CAでツリーを作成します

このマクロを使用してこの構造をトラバースすることができ、これは他のツリーのような構造でも機能します。

読みにくいですが、正常に動作します。このように CA のルートをたどります。

このように、他の構造で動作します

MyData のルートをたどる

ここに大きな問題があります。

ここでのラムダ式は再帰的な形式で定義されているため、オブジェクトとそのコンテナーの型を指定する必要があります。

マクロはテンプレート関数のような型を推測できますか? または、他の方法でこれを達成する必要がありますか?

0 投票する
1 に答える
81 参照

c++ - std::function は、渡す型が異なる (ref による、val による) 引数を持つラムダ関数を受け入れます。

次のコードを見てください

コード例では、異なるタイプのラムダが割り当てられた 1 つの std::function があります。

関数の署名が一致するため、ラムダ 3 は理解できます。

ただし、ラムダ 1 は別の関数シグネチャを作成しますが、正しくコンパイルされます。

Lambda 2 は (ref ではなく val によって) 間違った auto 型を推測し、正しくコンパイルします。

これは機能ですか、それともバグですか? 関数クラス/ラムダと自動型推論に関して、私は何を誤解していますか?

アップデート:

回答 Handy999 に感謝しますが、なぜ次のコードがコンパイルされないのですか?