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

0 投票する
2 に答える
985 参照

c++ - メンバー変数ポインター

特定の構造体の場合:

関数への呼び出しワッパーを作成できstd::mem_fn( &foo::fooFunc )ます。これにより、別のメソッドに渡してオブジェクトで呼び出すことができます。
同様の呼び出しラッパーがあるかどうかを知りたいのですが、メンバー変数用です。

たとえば、ここではメンバー変数へのポインターを使用していますが、呼び出しラッパーを使用したいと思います。

0 投票する
0 に答える
678 参照

c++ - std::mem_fn を使用して std::function クラス メンバーを呼び出す

私の計画は、定義済みの「コールバック フック」を所有するいくつかのリスナー クラスを構築することです。

以下の例では、クラスFooに という「コールバック フック」がありonChangeます。構築中にデフォルトのコールバック関数に設定されます。f1objectと function で示されているように、正しいインターフェイスを提供する任意の関数に設定することもできますcallback()

問題は、for ループ内でオブジェクト メンバーを呼び出したい場合にonChange、多くの引数を提供するとコンパイラが言うことです。メンバー関数を提供せず、std::mem_fn代わりに関数ラッパーであるオブジェクトメンバーを提供するという問題を認識しています。

例に示すように、使用せずstd::functionにクラスのメンバーオブジェクトに引数を渡すにはどうすればよいですか? Foostd::bindstd::mem_fn

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

c++ - 多態的な「変換」機能を作成するには、boost::bind を使用する必要がありますか?

指定されたパラメーターを使用して、ベクター内の各オブジェクトでメンバー関数を呼び出そうとしていますが、呼び出しをポリモーフィックにしたいと考えています。以下に示す関数vstuffがこれを達成すると思います。しかし、vstuff を変更して、boost::bind を使用せずに vector< shared_ptr < Base> > を取ることはできますか?

shared_ptr には mem_fun ではなく mem_fn が必要であることはわかっていますが、パラメーター t で渡す必要がある bind2nd で mem_fn を機能させることに成功していないので、実現可能かどうか疑問に思っています..?

0 投票する
2 に答える
571 参照

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(...) 行と関係があります。これは、削除すると正常にコンパイルされるためです。

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

c++ - void トラブルの戻り値を文字列に

この記事に基づいて、呼び出された関数の戻り値を文字列として出力する汎用パーサーを作成しようとしました。

std::strings の std::vector を任意の型の std::tuple に解析する

残念ながら、voidを返す関数の戻り値をフォーマットする方法がわかりませんでした...

と:

クラス:

主要:

コンパイラ呼び出し:

R が void 型ではない RT::f() で Execute を呼び出したときのエラー メッセージ (1):

Args... が非 void である void T::f(Args...) で Execute を呼び出したときのエラー メッセージ (2):

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

c++ - テンプレートの特殊化エラーをスローする関数ポインター (メンバー関数を含む) の配列

そのため、関数ポインターの配列を格納できる Delegate というクラスがあります。これはコードです:

Player.cpp での使用:

これにより、エラー C2893 がスローされます (エラー C2893 関数テンプレートの特殊化に失敗しました 'unknown-type std::invoke(_Callable &&,_Types &&...)')

しかし、Bind の定義を次のように変更すると:

正常に動作しますが、関数オブジェクトをベクターにプッシュしようとすると、同じエラーが再びスローされます。

これを解決する方法はありますか?

渡されたポインターをキャッシュする必要があります。