問題タブ [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++ - 型がジェネリック ラムダを含むファンクターであることを確認する
型がファンクターかどうかを判断するための特性メタ関数を作成できますか? の SFINAE を使用してファンクターをチェックできるコードはたくさんありdecltype(&T::operator())
ます。たとえば、
operator()
ただし、ジェネリック ラムダはテンプレート関数であるため、これはジェネリック ラムダでは機能しません。
ジェネリック ラムダの引数の型にいくつかの制約を加える、ジェネリック ラムダ バージョンの限定的なケースのコードがいくつかあります。たとえば、ラムダ式にメンバー アクセス操作などの型に対して有効ではない式が含まれている場合、ここでの回答 ( https://stackoverflow.com/a/5117641/2580815 ) は機能しません。int
アリティに一般性は必要ありません。実際、型が 1 つのパラメーターのみを受け入れるファンクターになる可能性があることを知る必要があるだけです。
どうすれば実装できis_functor
ますか?
使用事例:
指定されたパラメーターがテンプレート関数のファンクターであるかどうかを検証しようとしています。つまり、オーバーロードされたテンプレート関数が必要です。たとえば、次のようになります。
c++ - C++14: クラス メンバーとしてジェネリック std::function を持つジェネリック ラムダ
次の疑似スニペットを検討してください。
私が欲しいのはfooCall
、コンストラクターで割り当てられる汎用ラムダを格納するクラス メンバーです。
fooCall
コンパイラは、テンプレート化されたデータ メンバーになれないと文句を言います。
汎用ラムダをクラスに格納する方法に関する簡単な解決策はありますか?