問題タブ [boost-range]
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++ - ブースト範囲アダプターで STL コンテナーを使用する場合の value_type エラー
ブースト範囲アダプターの使用を理解しようとしてきましたが、私が見つけたすべての実用的な例は、プリミティブ型の STL コンテナーのみstd::list<int>
を使用し、独自のクラスを使用しようとすると、すべてがバラバラになります。
gcc 4.6/4.8 と boost 1.48/1.54/trunk を使用すると、次のコンパイル エラーが発生します。
thisへの回答でアドバイスされているように、私の定義にもかかわらず、問題を引き起こす可能性がある問題を理解してdecltype
います。ただし、ファンクター構造体を渡せない理由や、クラスに追加の要件があるかどうかはわかりません。result_of
transformed
BOOST_RESULT_OF_USE_DECLTYPE
filtered
Thing
c++ - オブジェクトがブースト範囲と互換性があるかどうかをテストするメタ関数
クラスが互換性があるかどうかをテストするメタ関数クラスはありますか、またはどのように記述しboost::range
ますか? boost::enable
のようなイディオムを使いたい
適切なis_range_compatible
メタ関数のために。is_containerについてはpretty_printから知っています。これは多くのケースをキャプチャしますが、boost::range
.
編集これは C++03 を使用しているため、C++11 の機能にはアクセスできません。私は古い gcc 4.1 とブースト 1.51 を使用しています。
c++ - ブースト範囲アダプターの宣言方法 (例: map_values)
私が持っていると言う
MyClass メソッドの内部には、次のように my_map の値を反復処理する非常に便利な方法があります。
ただし、基本的に my_map | を出力する MyClass のメソッドが必要です。boost::adaptors::map_values を追加し、MyClass メソッドの外で便利な値の反復を許可します。そのようなメソッドを宣言するにはどうすればよいですか? ある種の擬似コンテナと対応するイテレータを実装する必要がありますか?それともショートカットがありますか?
c++ - ブースト範囲が C++1y init-capture 可変ラムダで機能しない
Boost.Rangeとinit-capture で C++1y ラムダを使用して、2 つのベクトルの要素ごとの差を計算したいと考えています。1 つのベクトルの固定 (つまり最初の) 要素を減算する単純なケースが機能します。ただし、反復子を 2 番目の範囲で増やして (そしてラムダを可変にして) 「ベクトル化された差」を計算しようとすると、コンパイラ エラーが発生します。サンプル コード (g++ 4.8 と Clang SVN の両方がこのコードを解析できるように、一般化されたラムダを使用しなかったことに注意してください):
ライブの例。ここで g++ と Clang の両方が文句を言います
'boost::mpl::eval_if, boost::result_of]::__lambda1(const int&)>, boost::mpl::identity >::f_ {aka struct boost::result_of] に 'type' という名前の型がありません: :__lambda1(const int&)>}' typedef typename f_::type type;
質問: 何が起こっているのですか?
c++ - Boost.Range range_begin/end フリー関数が const 参照と非 const 参照の両方でオーバーロードされるのはなぜですか?
Boost.Rangeでこの興味深いビットを見つけました:
独立した関数range_begin/end()
を提供する場合、ドキュメントには次のように記載されています。
...
range_begin()
および参照引数range_end()
の両方に対してオーバーロードする必要がありconst
ます。mutable
実際、 のデフォルトを見てみるとend.hpp
、次のことがわかります。
両方のバージョンが同じ型を返すことに注意してください (ドキュメントに示されている例もこれを行っています)。Iterator
そもそもなぜ両方のオーバーロードが必要なのでしょうか? ADLを機能させるためですか?
c++ - `end()` が実際に最後を 1 回通過したことを示す入力イテレータの例は?
私は現在、いくつかのアイデアを理解しようとしています。C++イテレータ、そして私は疑問に思っていました...
Incremental / Single Pass / Input / Output Iteratorが与えられた場合、そのような Iterator の 1 つ後ろの位置 / 要素が実際に存在するか、またはすべて InputIterator end()
Iterators が「自然に」何らかの形式の特異値であるによって特別に扱われoperator==
ますか?
私が言いたいのはこれだと思います: 「上向き」のForwardIteratoroperator==
からのものについては、-ness に関係なく、2 つの iterator オブジェクトend
が同じ要素を指しているかどうかをチェックするだけの簡単なものを持つことは完全に理にかなっています。これは InputIterator にとって理にかなっていますか?