問題タブ [boost-foreach]
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++ で BOOST_FOREACH によってクラスを反復可能にする方法は?
編集:あきらめます!私はfor (string& word : sentence) { .. }
今代わりに単純に使用しています。BOOST_FOREACH
絶望的です。ありがとうございました。
私はこれとこれを読みましたが、まったく役に立ちませんでした。特に2つ目のリンクについてお聞きしたいです。名前空間の下にいくつかの奇妙な構造体を定義する必要があるのはなぜboost
ですか? BOOST_FOREACH を有効にしたいクラスは、自分の名前空間で定義されています。でイテレータを定義した場合、そのクラスからデータにアクセスするにはどうすればよいnamespace boost { .. }
ですか? これは意味がありません。IEnumerable
C++ で の同等性を見つけるのになぜそんなに時間がかかったのかわかりません! boost
私の時間を節約したくないですか?
このクラスを反復処理する最も適切な方法を教えてください。
このコードで:
ありがとう。
c++ - CRTP からの訪問者の自動定義 (Boost foreach と Boost バリアントを使用した CRTP)
同じインターフェイスを実装するオブジェクトのベクトルの効率的なアクセスを実装する必要があります。今までは、仮想関数で継承を使用していました。インターフェイスは、純粋仮想関数を持つ抽象クラスとして定義され、オブジェクトの各クラスは仮想関数を実装します。オブジェクトのベクトルは、単純に抽象クラスのポインターのベクトルです (動的な訪問の例については、メッセージの最後を参照してください)。
オブジェクト コレクションにすばやくアクセスする必要があります。私はコンパイル時にオブジェクトのすべての可能なクラスを知っているので、boost::variant を使用してオブジェクトのコレクション (つまり、boost::variant のベクトル) を実装しました。コレクションを通過するには、ビジター スキームの追加定義が必要です。すべてのオブジェクトが同じインターフェイスを実装していることを明示するために、CRTP を使用して静的継承を取得しました。インターフェイスは CRTP 抽象化であり、オブジェクトの各クラスはテンプレート化された CRTP 抽象クラスから派生しています。
CRTP 実装の例を次に示します。インターフェイスは、2 つの関数f()
と を定義するだけg(double)
です。2 つの派生クラスがあり、インターフェイスC1
をC2
実装しています (動作は同じです)。
このコードは機能し、動的継承を使用するコードよりも 15 倍効率的です (動的を使用するコードについては、メッセージの最後を参照してください)。CRTP に慣れていない人にとっては、コードを読むのは少し難しくなりますが、維持したり書いたりするのは難しくありません。インターフェイスは CRTP で明示的であるため、ビジターの実装はかなり単純ですが、冗長であり、理解するのも使用するのも面倒です。
私の質問は簡単です: CRTP インターフェイスから自動的に訪問者を定義することは可能ですか? f_visitor
andの余分な定義を避け、次のg_visitor
ような読みやすい外観を得たいと思います。
ご協力いただきありがとうございます。興味のある読者のために、仮想継承を使用した同じコードを次に示します。
c++ - 問題の解決 # C++98 Boost ライブラリ 1.53 または 1.56 を使用するコードでの「for_each」の有効な使用
私はすでに質問をしました。boost::for_each と boost::bind を使用してこれに対する解決策があるかどうか疑問に思っています。
質問は既に回答済みです。そのため、ここで別の問題を作成しました。好奇心のためだけに。ありがとう。
c++ - これにより、未定義の動作が発生しますか?
アドレス サニタイザーが文句を言っています。
c++ - Boost のプロパティ ツリーで get_value を使用する際の問題
Boost を使用して XML パーサーを作成する必要があります。しかし、私はいくつかの問題を抱えています。問題なくノード名にアクセスできますが、何らかの理由ですぐに機能するはずの get_value を使用してタグ内の属性にアクセスできません。たぶん、私が見つけられなかった私のコードに間違いがありますか? 見てみましょう:
したがって、基本的にはタグを無視して、ParametersGroup タグにいるときはさらに深く掘り下げ、Parameter タグにいるときはデータを復元して何かを行います。しかし、「名前」がうまく取得できません。
これは私が最後にスキャンしている行の種類ですelse if
:
には次のstd::cout << name
ようなものが表示されます。
これは明らかに私が求めているものではありません。
私は何を間違っていますか?どんな助けでも大歓迎です。
c++ - 現在の BOOST_FOREACH 要素へのポインタを取得します
次の単純なコードを考えます。
私の質問は、ptrToMyClass が時間オブジェクトまたはリスト内の実際のオブジェクトを指すようになったということです。それが最初のケースである場合、BOOST_FOREACH ループによって作成された一時変数の代わりに、リスト内のオブジェクトへのポインターを取得する方法はありますか?