問題タブ [stdarray]
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.
templates - std::array を返す constexpr 関数がコンパイラによって constexpr として扱われない
そのため、私の C++11 プロジェクトでは、クラス テンプレート パラメーターに基づいて、特定の特性テンプレートの特殊化をエイリアスしようとしています。これは、CRTP を使用してテンプレートから継承し、特殊化に使用される型を参照する必要なく、特性テンプレートのメンバーにアクセスできるようにすることを目的としています。
改善された最小限の例:
main.cpp
Matrix.h
MatrixImplementation.h
コンパイル時に次のエラーが発生します。
この最小限の例を準備しているときに、RowPins にアクセスしようとすると未定義の参照が返されることが明らかになりましたが、ColumnPins に int を格納するだけで、エラーなしでアクセスできます。その結果、コンパイラが constexpr 指定子を無視し、実行時に呼び出されるようにするため、MakePinArray テンプレート関数に何か問題があると推測しているため、未定義の参照エラーが発生します。
ただし、この回答の2番目の提案など、他の回答を見てきました: C++ 11でN要素のconstexpr配列を作成し、彼のbuild_array関数と私の間の機能的な違いを検出できません。
誰でも a) 私の理解が正しいことを確認できますか (つまり、constexpr 指定子が破棄され、RowPins の宣言はあるが定義はありません)、b) これを修正する方法を提案できますか?
役立つ場合の詳細情報として、私は VisualGDB/arm-gcc 4.9.2 を使用し、 でコンパイルしてい-std=c++11
ます。
c++ - array::data と array::front の使用法
と の間に違いは& array::front
ありarray::data
ますか?
例 1 :
例 2:
上の二つは同じですか?または、特別な使用法はありarray::data
ますか?
c++ - .begin() と .end() のポイントは何ですか?
.begin()
C++ ライブラリ配列で、メンバー関数とメンバー関数を使用すると便利な場合はどのような場合.end()
ですか?
cplusplus.com での使用例は、配列を反復処理することです。
しかし
そのために使用できます。
arrays - std::array のようなクラスを初期化する方法
ベクトル演算用のコンテナー クラスを作成しようとしています。オブジェクトのサイズは静的です。
これが私が得た距離です。
しかし、比較のために std::array クラスをテストしたところ、初期化子リストが長すぎたり短すぎたりすると、どういうわけか静的アサーションを作成できることに気付きました。
私のクラスでは、実行時にイニシャライザ リストの長さをチェックする必要があります。
std::array クラスは、 std::initializer_list クラスを使用せずに、初期化子リスト表記でデータを直接初期化するように何らかの方法で管理していると思います。
std::array と同じ方法でクラスを初期化することは可能ですか?
c++ - 2 次元 std::array の問題
C++11 の std::array のアイデアが気に入ったと思っていましたが、クォークが含まれているようです。次のコードでセグメンテーション違反が発生するため、これを見つけました。
これは以下を出力します:
sum.size()
予想通り 4 をsum[0].size()
返し5
、予想通り を返します。IE では、4 行 5 列の配列があるようです。ただし、このプログラムを実行しようとすると、セグメンテーション違反が発生します (上記のように)。このリンクは、配列にアクセスする方法の順序を逆にすること(に変更sum[i][j]
するsum[j][i]
場合など)が機能することを示唆していますが、その場合もセグフォルトが発生します。これにより、ポインターで何か間違ったことをしている可能性があると思いました (私は C++ に少し慣れていません)。そのため、sum を整数の配列に変更したため、次のようになりました。
どちらが機能し、出力します:
sum[i][j]
ただし、 を に切り替えるとsum[j][i]
、同じことが機能して出力されるため、混乱しています。sum[5][0]
最初に実行される内側のループの最後の反復中に試行すると、seg-fault が発生することが予想されます。私は今、自分自身を混乱していると呼んでいます。何が起こっている?
追加情報: -std=c++11 フラグを設定して g++ 4.8.4 を使用しています。
c++ - std::array の要素に対してユーザー定義のコンストラクターを呼び出す
std::array
いくつかの Foo 要素を作成する簡単な例があります。
コンストラクターで初期化リストを使用すると、m_bar(bar)
すべてがFoo.m_bar
に0
設定されます (これはデフォルトのコンストラクターパラメーター値であるため)。そうしないと、ガベージ値でいっぱいになります。
私の質問は、配列サイズを事前に知らなくても、デフォルト値とは異なる別の値を配列内のすべての要素のコンストラクターに渡すにはどうすればよいですか?
次のように、配列を作成するときに初期化リストを使用しようとしましたが、それは最初の要素を にstd::array<Foo, 5> fooArr{3}
設定するだけです。m_bar
3
c++ - emplace と unordered_map >
私は持っていstd::unordered_map<string, std::array<int, 2>>
ます。emplace
マップに値を ing する構文は何ですか?
私はclang++ -c -x c++ -std=c++14
3.6.0を使用してclangしています
http://ideone.com/pp72yRでコードをテストしました
補遺: (4) は、以下の回答で Nathan Oliver によって提案されました。
c++ - boost::spirit::x3 の属性として std::array を使用する
std::array
boost::spirit の最新リリース x3 (boost 1.54 に含まれている) を使用して、数値のリストを固定サイズのコンテナーに解析しようとしています。必要な機能を備えているためstd::array
、コンテナとして認識されますが、挿入機能がないため互換性がありません。これが私が達成しようとしていることの短い例です:
std::array
関数がないため、これはコンパイルされませんinsert
。回避策として、セマンティック アクションを使用しました。
そして電話する
代わりは。これは機能しますが (-std=c++14 で clang 3.6.0 を使用)、このソリューションは非常に洗練されておらず、読みにくいと思います。
BOOST_FUSION_ADAPT_ADT
だから私は std::array を次のように使用して融合シーケンスとして適応させようとしました:
次に Vertex を特殊化x3::traits::is_container
して x3 に std::array をコンテナーとして扱わないように指示します。
ただし、これは x3 と組み合わせてコンパイルすることはできません。これはバグですか、それとも使い方が間違っていますか? たとえば、すべての x3 コードなしで呼び出すfusion::front(v)
と、コンパイルして機能するので、コードが完全に間違っているわけではないと思います。
ただし、この単純な問題に対するフュージョン アダプターやセマンティック アクションを含まない x3 を使用した、よりクリーンなソリューションがあると確信しています。