問題タブ [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.

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

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 をこのプロジェクトに組み込むことで、所有権の譲渡のセマンティクスに関していくつかのバグを既に発見しています。だから私は「ああ、これは複雑すぎる、生のポインタを使うだけだ」と言いたくありません。

これはブーストの議題でサポートするものですか? タイムラインはありますか?当面の間、使用できる簡単な回避策はありますか?

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

c++ - `boost :: multi_array_ref`のデストラクタが非仮想であるのはなぜですか?

との間const_multi_array_refの関係は次のとおりです。multi_array_refmulti_array

  • multi_array_refから派生const_multi_array_ref
  • multi_arrayから派生multi_arry_ref

const_multi_array_refただし、とのデストラクタmulti_array_refは非仮想です。実際、明示的に実装されたデストラクタはありません。1つだけmulti_arrayあります。これは、次の使用法が推奨されていないことを意味しますか?

もしそうなら、なぜですか?

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

c++ - boost::multi_array の ConstMultiArrayConcept に NumDims テンプレート引数があるのはなぜですか?

を処理するoperator<<特殊化を作成し、外側の配列とサブ配列の両方で機能するようにboost::multi_array使用しました。しかし、なぜ概念にテンプレート引数があるConstMultiArrayConceptのか​​ 疑問に思っています。それは. inの唯一の用途は、スライスをテストするの再帰の深さの引数としてです。multi_arraystd::size_t NumDimsmulti_arrayNumDimsConstMultiArrayConceptidgen_helper

multi_array参考までに、概念 のヘッダーは次のとおりです。 http://www.boost.org/doc/libs/1_51_0/boost/multi_array/concept_checks.hpp

そして、これが私の過負荷ですoperator<<

この専門化は機能しますが、私の理解では何かが欠けているに違いありません。手がかりをいただければ幸いです。

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

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);

エラーを生成します

どんな提案にも非常に感謝しています。明らかな何かが欠けていると確信しています。

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

c++ - Boost multi_array ビューの反復処理

ビューのすべての要素を Boost に反復処理する方法はありmulti_arrayますか? Boost を反復処理する方法は明らかmulti_arrayです。つまり、範囲を超えます[array.data(), array.data() + array.num_elements())。しかし、この配列にビューを作成すると (配列の一部のサブセットを切り取ります)、ポインターを使用した連続アクセスは明らかに不可能です。ビューはメモリの連続ブロックに対応しません。Boost はこれに対処するメカニズムを提供しますか、それとも手動でソリューションを実装する必要がありますか?

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

c++ - boost::multi_array ビルダーでのコンパイル エラー

multi_array をより効率的に使いたい場合は、multi_array ビルダーを使用したほうがよいと言われています。ただし、テンプレートとブーストの両方に慣れていないので、本からいくつかのコードをコピーしようとしました。次のようになります。

ただし、次のようなコードで使用しようとすると:

コンパイラは次のエラーを生成します。

誰かがエラーを修正する方法を教えてもらえますか?

0 投票する
3 に答える
585 参照

c++ - C++のクラスコンストラクターからの引数を使用してパブリック属性を初期化します

私は次のように.cppファイルに実装されたクラスを持っています:

そして、ヘッダー.hファイルで次のように定義されています:

私の問題は、main.cppからこれを呼び出すと、属性PoreNetwork::RadiusesとPoreNetwork::Statesが初期化されていないように見えることです。

私が理解しているように、.cppの半径と状態は、再定義しているため、ヘッダーファイルで定義されているものではありません。

私の問題は、Boost :: multi_arrayであり、それらのコンストラクターがクラスコンストラクターも取るパラメーターを入力として受け取ることを知って、クラスでこれら2つの属性を定義および初期化する方法です。

つまり、私のPoreNetworkクラスのコンストラクターは、intである1つの引数esizeを取ります。これは、属性RadiusesおよびStatesのコンストラクターの引数でもあります。

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

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>]: Assertionstd::equal(other.shape(),other.shape()+this->num_dimensions(), this->shape())' failed.`

そして、私には理由がわかりませんか?

ベクトルを使用できることはわかっていますが、引数のために、region_prior_integral_images の配列が必要だとしましょう。

ありがとう

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

boost - boost::multi_array を初期化できませんT に引数のないコンストラクタがない限り

引数のないコンストラクターがboost::multi_array<T, n>必要なようです。T次の例を考えてみましょう。

これにより、コンパイル エラーが発生します。

問題は、コピー コンストラクターがコピーboost::multi_array<T,n>にスペースを割り当てようとすると、 を呼び出そうとすることT()です。もちろん、引数のないコンストラクターをクラスに追加することもできます。しかし、引数のないコンストラクターが意味をなさないクラスがある場合はどうなるでしょうか?

T に引数のないコンストラクタがない場合、boost::multi_array を使用する簡単な方法はありますか?

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

c++ - boost::multi_array をファイルに保存する方法

3D boost::multi_array をファイルに保存して読み込む簡単な方法を探しています。私の知る限り、Boost ライブラリには奇妙なメソッドはありません。

ファイルを人間が読める形式にする必要はないので、バイナリ ファイルの方がパフォーマンスが向上します。既製のソリューションを教えてくれたり、そのような読み取り/書き込みメソッドを実装する方法についてアイデアをくれたりできますか?

bool 型と int 型の 3D multi_arrays を使用するため、テンプレートを使用する必要があります。