問題タブ [mem-fun]
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++ - メンバー変数ポインター
特定の構造体の場合:
関数への呼び出しワッパーを作成できstd::mem_fn( &foo::fooFunc )
ます。これにより、別のメソッドに渡してオブジェクトで呼び出すことができます。
同様の呼び出しラッパーがあるかどうかを知りたいのですが、メンバー変数用です。
たとえば、ここではメンバー変数へのポインターを使用していますが、呼び出しラッパーを使用したいと思います。
c++ - std::mem_fn を使用して std::function クラス メンバーを呼び出す
私の計画は、定義済みの「コールバック フック」を所有するいくつかのリスナー クラスを構築することです。
以下の例では、クラスFoo
に という「コールバック フック」がありonChange
ます。構築中にデフォルトのコールバック関数に設定されます。f1
objectと function で示されているように、正しいインターフェイスを提供する任意の関数に設定することもできますcallback()
。
問題は、for ループ内でオブジェクト メンバーを呼び出したい場合にonChange
、多くの引数を提供するとコンパイラが言うことです。メンバー関数を提供せず、std::mem_fn
代わりに関数ラッパーであるオブジェクトメンバーを提供するという問題を認識しています。
例に示すように、使用せずstd::function
にクラスのメンバーオブジェクトに引数を渡すにはどうすればよいですか? Foo
std::bind
std::mem_fn
c++ - 多態的な「変換」機能を作成するには、boost::bind を使用する必要がありますか?
指定されたパラメーターを使用して、ベクター内の各オブジェクトでメンバー関数を呼び出そうとしていますが、呼び出しをポリモーフィックにしたいと考えています。以下に示す関数vstuffがこれを達成すると思います。しかし、vstuff を変更して、boost::bind を使用せずに vector< shared_ptr < Base> > を取ることはできますか?
shared_ptr には mem_fun ではなく mem_fn が必要であることはわかっていますが、パラメーター t で渡す必要がある bind2nd で mem_fn を機能させることに成功していないので、実現可能かどうか疑問に思っています..?
c++ - シグナル接続時の gtkmm コンパイラ エラー
私は GUI を使用してアプリケーションに取り組んでおり、別のシグナル (Gtk::ComboBox からの signal_changed) の接続でシグナル (View からの sig_showList) を送信しようとすると問題が発生します。ヘルプ。コードは次のようになります。
「view.h」
「view.c」
でコンパイルしg++ -std=c++98 *.cpp -o out $(pkg-config gtkmm-3.0 --cflags --libs)
ます。私が得ているエラーは次のとおりです。
【実際のクラス名は「Vista」】
うーん、意味がわかりません!さらに、これはすでに発生しており、何とか解決できましたが、再フォーマットと再設計の後、再び表示され、どうすればよいかわかりません。これは間違いなく、combo->signal_clicked().connect(...) 行と関係があります。これは、削除すると正常にコンパイルされるためです。
c++ - void トラブルの戻り値を文字列に
この記事に基づいて、呼び出された関数の戻り値を文字列として出力する汎用パーサーを作成しようとしました。
std::strings の std::vector を任意の型の std::tuple に解析する
残念ながら、voidを返す関数の戻り値をフォーマットする方法がわかりませんでした...
と:
クラス:
主要:
コンパイラ呼び出し:
R が void 型ではない RT::f() で Execute を呼び出したときのエラー メッセージ (1):
Args... が非 void である void T::f(Args...) で Execute を呼び出したときのエラー メッセージ (2):
c++ - テンプレートの特殊化エラーをスローする関数ポインター (メンバー関数を含む) の配列
そのため、関数ポインターの配列を格納できる Delegate というクラスがあります。これはコードです:
Player.cpp での使用:
これにより、エラー C2893 がスローされます (エラー C2893 関数テンプレートの特殊化に失敗しました 'unknown-type std::invoke(_Callable &&,_Types &&...)')
しかし、Bind の定義を次のように変更すると:
正常に動作しますが、関数オブジェクトをベクターにプッシュしようとすると、同じエラーが再びスローされます。
これを解決する方法はありますか?
渡されたポインターをキャッシュする必要があります。