問題タブ [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++ - C ++により、mem_funに特定のオーバーロードされたメンバー関数を選択させる
私は実際に私の質問のタイトルが示唆することを行う方法を理解しましたが、満足のいくポータブルな方法ではありません。具体的に説明します。
これは私のコードの簡略化されたバージョンです:
さて、私の問題は、このコードがMicrosoft Visual Studio C ++2008を搭載したWindows7で正常にコンパイルおよび動作することですが、g ++(バージョン4.1.2 20080704)を搭載したRedHatLinuxでは正常に動作しません。次のエラーが発生します。
mem_fun()
Linuxでは、呼び出しを次のように置き換えると、コンパイルされて正常に動作しますmem_fun( static_cast<int (A::*)() const>(&A::my_val) )
。ただし、このソリューションは、最初のソリューションよりも見た目が良くありません。私がやりたいことをする別のポータブルな方法はありますか?(おそらく、これを行うための明白な簡単な方法があり、私はそれについて大騒ぎしているだけです...)
前もって感謝します。-マヌエル
c++ - コンテナー内のオブジェクトごとに 1 つのパラメーター (バインド) を使用してメンバー関数を呼び出す
私は
とCoil
の基本クラスでCilCoil
ありRectCoil
、それぞれ円筒形コイルと長方形コイルです。ここで、指している incalcField
ごとにメンバー関数を呼び出したいと思います。このメンバー関数は、基本クラスでは純粋に仮想ですが、派生クラスで実装されており、その宣言は次のようになります。Coil
Coils
Root ライブラリのTVector3
3D ベクター クラスです。Coil
ここでのアイデアは、すべてのフィールドを計算し、Coils
それらを合計することです。(つまり、フィールドを計算する位置へのベクトル)の引数はcalcField
すべての呼び出しで同じになるため、<algorithm>
or<numeric>
ヘッダーからSTLアルゴリズムを使用して、次のようなことをしたいと思います(想像):
明らかに、私は質問をするためにここにいるので、これはうまくいかないようです。したがって、私の質問は非常に簡単に言えば、なぜこれが機能しないのか、および/または正しい方法で (STL の制限内で) どうすればよいのでしょうか?
上記をコンパイルしようとすると、次のエラー メッセージが表示されます (作業中のファイルは Interface.cpp と呼ばれ、サードパーティ コードです)。
c++ - mem_fn と bind の実用的な使い方
tr1 の mem_fn および bind ユーティリティのクールで実用的な使い方を誰かが推奨できますか? ライブラリ開発に難解な c++ は必要ありません。これらを利用するアプリケーションレベルのコーディングです。
どんな助けでも大歓迎です。
c++ - mem_fun_ref() で boost::bind() を使用できますか?
私の質問は非常に簡単です。このようなことはできますか?
クラス foo に次のメンバー関数が含まれているとします。
フーの使用:
それで、これは可能ですか?問題はboost::bind()
、それが機能する関数のメンバー/非メンバーの性質に影響を与えるかどうかです。次のように逆に進むことはできないと思います。
std::mem_fun_ref()
単項または null の関数を取り、DoSomething()
バイナリであるためです。
c++ - サブクラスのメソッドメンバーポインタを割り当てる方法は?
私の問題は少し複雑です。Ports オブジェクトを持つ 1 つのクラス (e: コンポーネント) があります。Component が Port オブジェクトを作成するとき、そのメソッドの 1 つを Port コンストラクターに渡します。
メソッドのシグネチャ :
私がすればそれはうまくいきます:
さて...今、私の問題は、コンポーネント クラスのサブクラスを作成し、サブクラス メソッドをポートに渡す方法がわからないことです。
それは正常なようです:コンパイラは正確にコンポーネント(のみ)メソッドを期待していると思います。
--> Ports でメソッドを「動的に」割り当てるための解決策を探しています (しかし、これが可能だとは思いません)。
--> 多分別の解決策はテンプレートの使用でしょうか? (「コンポーネントメソッドポインター」ではなく「テンプレートメソッドポインター」を定義しています)が、よくわかりません。
どんな助けでも大歓迎です:)
c++ - foreachを使用して、複数のwxTextCtrlsのラベルを空の値に設定します
次のようにfor_eachを使用して、wxTextCtrlの複数のラベルを空の値に設定しようとしています。
問題は、このエラーが発生することです。
私が間違っていることを説明していただけますか?ありがとう。
c++ - 手巻きファンクタと比較した std::mem_fn の欠陥
std::mem_fn
手巻きのラッパー関数ができることをできないユースケースに遭遇しました。メソッドのクラスではなく、暗黙的にそれに変換可能な型でラッパー関数が使用されている場合に発生します。
foo1 への呼び出しのコンパイラ エラーは次のとおりです (GCC 4.8 の場合)。
std::mem_fn
このユースケースが手巻きラッパーの場合と同じように機能するように実装することは可能でしたか?
c++ - このあいまいさをどのように解決できますか。mem_fun?
練習するために、私が再び慣れ親しんでいるトピックの1つは木です。深さ優先探索と幅優先探索の違いは、アルゴリズムをサポートするデータ構造の選択のみが異なることです。
テンプレートを使用してスタック(DFS)またはキュー(BFS)のいずれかにフィードする一般的なツリー検索を作成できると思いました。stack
追加メンバーとqueue
削除メンバーの名前が同じであるという点で十分です。残念ながら、アクセス関数は一度呼び出さtop
れfront
、もう一方は呼び出されます。このため、私は自分が望む場所に完全に到着しませんでした。私はそのラムダなしでそれを行うことができませんでした:
私は、それぞれのアクセス機能を提供するためにmem_fun
(または)を使用できるはずですが。mem_fun_ref
私は試した
しかし、コンパイラは(バージョンconst
と非const
バージョンの間の)あいまいさについて文句を言います。
そこで私はインターネットを検索し、テンプレートタイプを明示的に提供する必要があることを学びました。
悲しいことに、 ???の多くの可能性のどれも コンパイラを満足させることができたと思います。
誰かが私にヒントを与えることができますか?
更新:ここに完全な実例があります(NO_LAMBDAを定義する場合を除く):
c++ - 仮想呼び出し演算子を使用した std::transform は、「グローバル関数には 'this' ポインターがありません」をスローします
PayOff は抽象基本クラスで、CallPayOff と PutPayOff はそこから派生します。呼び出し演算子は基本クラスで純粋仮想関数として定義され、CallPayOff と PutPayoff は独自の実装を提供します。
呼び出し演算子は次のように定義されます。
どなたか見ていただけませんか?Boost/C++11 はオプションではありません。
c++ - メンバー関数 mem_fun 呼び出しが const でなければならないのはなぜですか?
mem_fun
またmem_fun_ref
、他の多くのメンバー関数アダプターは、メンバー関数を通常の関数のように動作させることができます。ただし、呼び出すメンバー関数はconstでなければならないという制限が 1 つあります。私はそれらの使用方法を知っていますが、その背後にある理由に混乱し、困惑しています. なぜこのように設計されているのですか?
更新:あいまいで申し訳ありません。以下に例を書きます。