問題タブ [boost-multi-array]
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++ - ブーストの multi_array とオプションを C++11 unique_ptr と混合すると機能しない
私は G++ 4.7 でブリーディング エッジのセットアップをまとめました (ただし、現時点ではsudo apt-get boost-all-dev
、Debian Wheezy に付属のブースト 1.48 をまだ使用しています)。
私のコードは、使用する論理データ構造がunique_ptrの多次元配列になる場所に設定されています。しかしmulti_array
、unique_ptr が含まれている場合、空の単一要素の配列でさえ構築できないようです。したがって、これは機能します:
しかし、これはしません:
コンパイラからの関連する苦情は次のとおりだと思います。
/usr/include/c++/4.7/bits/stl_uninitialized.h:225: 'void std::uninitialized_fill_n(_ForwardIterator, _Size, const _Tp&) から必要 [with _ForwardIterator = std::unique_ptr*; _Size = unsigned int; _Tp = std::unique_ptr]'</p>
optional< unique_ptr<...> >
ここで提供されているパッチを適用しても、いくつかの問題があります。
https://svn.boost.org/trac/boost/ticket/1841
( 注: Is it possible to move a boost::optional? で見つかりました)
たとえば、次のようになります。
自分のしていることは合法だと感じています。実際、unique_ptr をこのプロジェクトに組み込むことで、所有権の譲渡のセマンティクスに関していくつかのバグを既に発見しています。だから私は「ああ、これは複雑すぎる、生のポインタを使うだけだ」と言いたくありません。
これはブーストの議題でサポートするものですか? タイムラインはありますか?当面の間、使用できる簡単な回避策はありますか?
c++ - `boost :: multi_array_ref`のデストラクタが非仮想であるのはなぜですか?
との間const_multi_array_ref
の関係は次のとおりです。multi_array_ref
multi_array
multi_array_ref
から派生const_multi_array_ref
multi_array
から派生multi_arry_ref
const_multi_array_ref
ただし、とのデストラクタmulti_array_ref
は非仮想です。実際、明示的に実装されたデストラクタはありません。1つだけmulti_array
あります。これは、次の使用法が推奨されていないことを意味しますか?
もしそうなら、なぜですか?
c++ - boost::multi_array の ConstMultiArrayConcept に NumDims テンプレート引数があるのはなぜですか?
を処理するoperator<<
特殊化を作成し、外側の配列とサブ配列の両方で機能するようにboost::multi_array
使用しました。しかし、なぜ概念にテンプレート引数があるConstMultiArrayConcept
のか 疑問に思っています。それは. inの唯一の用途は、スライスをテストするの再帰の深さの引数としてです。multi_array
std::size_t NumDims
multi_array
NumDims
ConstMultiArrayConcept
idgen_helper
multi_array
参考までに、概念
のヘッダーは次のとおりです。 http://www.boost.org/doc/libs/1_51_0/boost/multi_array/concept_checks.hpp
そして、これが私の過負荷ですoperator<<
この専門化は機能しますが、私の理解では何かが欠けているに違いありません。手がかりをいただければ幸いです。
c++ - コンパイルではなく、動的に割り当てられたブースト multi_array 内のクラスへのポインター
Boost を使用した C++ は初めてです。
クラス "world" のオブジェクトに、"octreenode" 型の "chunk" という名前の配列を持たせたいと考えています。以前は通常の 1 次元配列を使用していましたが、これはうまくいきました。現在、Boost の multi_array 機能を備えた 3D 配列の使用に移行しようとしていますが、何が間違っているのか本当にわかりません。
簡略化されたコード:
その後、割り当てを試みた場合
root->planet[0]->chunk[0][0][0]->material = 4;
エラーが発生します:
「octreenode」には関連するコンストラクターがあり、この行は次の場合と同じ構文で機能しました。
root->planet[0]->chunk[0]->material = 4;
(一次元配列)。同様に、1 次元配列で正常にコンパイルされたときに、次のような「octreenode」オブジェクトへのポインターを期待する関数にチャンクを渡そうとしました。
compactoctree (root->planet[p]->chunk[cz][cx][cy], 0, 14);
エラーを生成します
どんな提案にも非常に感謝しています。明らかな何かが欠けていると確信しています。
c++ - Boost multi_array ビューの反復処理
ビューのすべての要素を Boost に反復処理する方法はありmulti_array
ますか? Boost を反復処理する方法は明らかmulti_array
です。つまり、範囲を超えます[array.data(), array.data() + array.num_elements())
。しかし、この配列にビューを作成すると (配列の一部のサブセットを切り取ります)、ポインターを使用した連続アクセスは明らかに不可能です。ビューはメモリの連続ブロックに対応しません。Boost はこれに対処するメカニズムを提供しますか、それとも手動でソリューションを実装する必要がありますか?
c++ - boost::multi_array ビルダーでのコンパイル エラー
multi_array をより効率的に使いたい場合は、multi_array ビルダーを使用したほうがよいと言われています。ただし、テンプレートとブーストの両方に慣れていないので、本からいくつかのコードをコピーしようとしました。次のようになります。
ただし、次のようなコードで使用しようとすると:
コンパイラは次のエラーを生成します。
誰かがエラーを修正する方法を教えてもらえますか?
c++ - C++のクラスコンストラクターからの引数を使用してパブリック属性を初期化します
私は次のように.cppファイルに実装されたクラスを持っています:
そして、ヘッダー.hファイルで次のように定義されています:
私の問題は、main.cppからこれを呼び出すと、属性PoreNetwork::RadiusesとPoreNetwork::Statesが初期化されていないように見えることです。
私が理解しているように、.cppの半径と状態は、再定義しているため、ヘッダーファイルで定義されているものではありません。
私の問題は、Boost :: multi_arrayであり、それらのコンストラクターがクラスコンストラクターも取るパラメーターを入力として受け取ることを知って、クラスでこれら2つの属性を定義および初期化する方法です。
つまり、私のPoreNetworkクラスのコンストラクターは、intである1つの引数esizeを取ります。これは、属性RadiusesおよびStatesのコンストラクターの引数でもあります。
c++ - C++:boost::multi_array の配列を持つ方法
こんにちは、以下のように定義されたいくつかの boost::multi_array があります。
region_prior_integral_image
次のような配列を作成しようとしています。
ただし、プログラムは次のように終了しています: SemanticTextonForest: /home/aly/libs/boost_1_51_0/stage/include/boost/multi_array/multi_array_ref.hpp:488: boost::multi_array_ref<T, NumDims>& boost::multi_array_ref<T, NumDims>::operator=(const ConstMultiArray&) [with ConstMultiArray = boost::multi_array<double, 3ul>, T = double, long unsigned int NumDims = 3ul, boost::multi_array_ref<T, NumDims> = boost::multi_array_ref<double, 3ul>]: Assertion
std::equal(other.shape(),other.shape()+this->num_dimensions(), this->shape())' failed.`
そして、私には理由がわかりませんか?
ベクトルを使用できることはわかっていますが、引数のために、region_prior_integral_images の配列が必要だとしましょう。
ありがとう
boost - boost::multi_array を初期化できませんT に引数のないコンストラクタがない限り
引数のないコンストラクターがboost::multi_array<T, n>
必要なようです。T
次の例を考えてみましょう。
これにより、コンパイル エラーが発生します。
問題は、コピー コンストラクターがコピーboost::multi_array<T,n>
にスペースを割り当てようとすると、 を呼び出そうとすることT()
です。もちろん、引数のないコンストラクターをクラスに追加することもできます。しかし、引数のないコンストラクターが意味をなさないクラスがある場合はどうなるでしょうか?
T に引数のないコンストラクタがない場合、boost::multi_array を使用する簡単な方法はありますか?
c++ - boost::multi_array をファイルに保存する方法
3D boost::multi_array をファイルに保存して読み込む簡単な方法を探しています。私の知る限り、Boost ライブラリには奇妙なメソッドはありません。
ファイルを人間が読める形式にする必要はないので、バイナリ ファイルの方がパフォーマンスが向上します。既製のソリューションを教えてくれたり、そのような読み取り/書き込みメソッドを実装する方法についてアイデアをくれたりできますか?
bool 型と int 型の 3D multi_arrays を使用するため、テンプレートを使用する必要があります。