問題タブ [boost-function]

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 投票する
6 に答える
6047 参照

c++ - 関数をラップするブースト関数とラムダ

この単純なコードを変換したい:

そのようなものに、 setZComp を外部で宣言するのではなく、ある種のインライン宣言をするために

私は Boost Bind と Lambda にまったく慣れていないので、これが何らかの方法で実行できるかどうかわかりません。明らかに、上記のコードは機能しません。

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

c++ - 可変パラメータ関数のレジストリを保持する方法

私がやろうとしていることを説明します:

私はゲームに取り組んでいます。グラフィックを処理するために、更新して描画する ScreenLayers のスタックがあります。ScreenLayer は、ゲームのいくつかの側面 (インベントリ、パーティの概要、ワールド マップ、タイルマップなど) の視覚化を提供する役割を果たします。

画面遷移を処理するために、さまざまな画面タイプの関数のレジストリを作成したいと考えています。次に、画面はこのレジストリを呼び出して、描画スタックから画面レイヤーをプッシュおよびポップします。(つまり、タイル マップ上でスタートを押すと、タイル マップはレジストリを呼び出し、ルート スタート メニュー画面を作成するように指示します。スタート メニューはタイル マップの上にプッシュされ、入力を制御します。スタート メニューが閉じられるまで、その時点でスタックからポップされ、それを呼び出したレイヤーに制御が戻されます)

問題は、各スクリーン レイヤーがそれを構築するために異なるパラメーター セットを必要とすることです。

すなわち

対。

理想的には、各画面で、スクリーンレイヤーをラップして適切な ScreenStack にする小さな関数を登録できるようにしたいと考えています

すなわち

可変引数を受け取る ScreenStack 作成関数を登録する方法と、可能であれば、各 ScreenLayer 派生クラスがこのスタック作成関数自体を登録できるようにする方法が必要です。

私の最初の考えは、次のようなことを試すことでした:

ただし、boost::function は の "..." では機能しません<cstdarg>。さらに、画面をインスタンス化しようとする前に、画面を事前登録する方法がありません。

boost::function を介して一般的な void 関数ポインターに切り替えることを検討しましたが、これを回避できる場合はそうしたいと思います。プリプロセッサを使用してスタック登録を行うことは可能だと思いますが、プリプロセッサの経験があまりないため、これを行う方法がわかりません。

ファクトリを使用してスクリーン スタックを作成することを検討していましたが、スクリーン レイヤ タイプとさまざまなパラメータを追加するたびにファクトリ関数を更新し続ける必要があるため、これはあまり良い解決策とは思えません。

誰かがこれで私を助けることができれば、それは大歓迎です。不明な点がある場合はお知らせください

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

c++ - boost::bindを使用してno-opファンクターを実装する

関数がありますvoid get(boost::function<void(void)> callback) { callback(); }get(boost::bind(/* don't know what to put here*/));コールバックが何もしないように、他の関数、変数、または構造体を実装せずにのように呼び出しを行いたい。このような「no-op」コールバックをC++03で実装することは可能ですか?

の使用boost::bind()が推奨されますが、必須ではありません-おそらく、私の目標を達成するための他のトリックがいくつかあります。

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

c++ - 異なる長さのテンプレートパラメータを持つboost::functionサポートテンプレートクラスはどのように機能しますか

基本的にboost::functionと同じように、boostプリプロセッサを使用して異なるテンプレート変数の長さのテンプレートクラスを宣言したいと思います。

上記のコードは、同じヘッダーファイルで異なるテンプレート変数の長さを持つ同じクラスを宣言しているため、明らかに機能しません。私が達成したいのは、boost :: functionのように、単一のファイルを含め、異なるテンプレート変数の長さでクラスを定義することです。

boost :: functionのコードを調べましたが、どのように機能するのか理解できません。何か案は?

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

c++ - ブースト関数とブーストバインド:戻り値をバインドしますか?

これは、この前の質問に関連しています:boost::bindとboost::functionの使用:バインドされた変数タイプを取得します

私はこのような関数をバインドすることができます:

.hで:

.cppで

しかし、どうすれば戻り値をバインドできますか?すなわち:

.hで:

.cppで

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

c++ - 非同期関数による asio コンパイル エラーの増加

非同期を作成したい。サーバ。私はそれを成功させましたが、今は async_read/asyn_write 関数を呼び出し元オブジェクト関数にバインドしたいと考えています。だから私はboost::functionでそれをやろうとしましたここに私のコードがあります:

サーバー.cpp

Client.h および .cpp

および Network.cpp および .h

それをコンパイルしたいとき、次のエラーがあります:

何時間もの「グーグル」と反射の後、なぜこれらのエラーが発生するのかわかりませんでした。誰でも私を助けてくれますか?

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

c++ - ブースト:: VS2010 の関数: エラー C2039: '関数': 'ブースト' のメンバーではありません

情報

次のように、boost::function を使用してコールバックをパラメーターとして渡したいと思います。

そしてそれを使用します:

結局、一連のコールバックの後、私は呼び出します

問題

デバッグでソリューションをコンパイルしたところ、すべて問題ないように見えます...

しかし、リリースでは、上記のエラーがたくさんありました

私は混乱し、がっかりしています。

提案

には異なる構文があることがわかりましたboost::function。たとえば、boost::function0またはboost::function1. これは、VS2010 が何かをサポートしていないために作成されました (正確にはわかりません)。

私は正しいですか?

また、このアプリケーションを可能な限り移植可能でクロスプラットフォームにする必要もあります。

ブースト 1.47 および VS2010

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

c++ - mpl::if_、boost::function、および void への typedef の使用に関する問題

私はBoost.MPLライブラリを初めて使用し、いくつかの「初心者の問題」があります

このサンプルを見てください:

コンパイルすると、次のようになります。

ここでの問題は何ですか。どうすれば解決できますか?

私の理解では、選択された部分のみがmpl::if_コンパイラによって評価されるべきです....

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

c++ - Boost Overload の奇妙な動作.. `int (int ), int (std::string )` は `int (int ), int (std::string ), std::string (std::string)` とどう違うのですか?

そのため、 OverLoad (ダウンロード可能な svn ディレクトリへのリンク、lib はヘッダーのみ)と呼ばれる優れた lib があります。任意のタイプの関数を受け入れることができ、呼び出す関数を自動的に決定します。ブースト機能に似ていますが、より優れています。ここに 2 つのコード サンプルがあります (ブラウザーはブースト svn を表示できます) one two . そして、コンパイルされず、それらに基づいている私のコードは次のとおりです。

それで、この問題をどのように回避するのだろうか?

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

c++ - 関数ポインタをboost::functionオブジェクトにバインドします

boost::function生の関数ポインタでオブジェクト を初期化するにはどうすればよいですか?

メタコード

..。

追加情報が必要な場合は、私に知らせてください。