問題タブ [guideline-support-library]
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++ - gsl::as_span に gsl::span を返すように強制する?
次の関数を考えると、読み取り専用のfloat スパン (動的または任意の静的サイズのいずれか):
私が持っているとしましょうvector<float>
。それを引数として渡すことは機能しませんが、使用することもできませんgsl::as_span
:
上記はコンパイルされません。どうやらgsl::as_span()
a を返しますgsl::span<float>
。暗黙のキャストが不可能な理由を理解してgsl::span<const float>
いないことに加えて、読み取り専用スパンを強制的gsl::as_span()
に返す方法はありますか?
c++ - gsl::span を返すべきかconst std::vector の代わりに&
std::vector<int> メンバーを持つクラスと、そのベクターへの const 参照を返すメンバー関数があります。
メンバーの型を、コンテナー型のような別の配列に変更して、機能が十分でメモリ フットプリントが小さいものに変更する予定です (例: std::experimental::dynarray、std::unique_ptr<int[]>)。したがって、実際のコンテナーを const 参照として返すのではなく、要素へのビューを gsl::span<const int> として返すことをお勧めします。
ただし、同じ未変更のベクターの 2 つのスパン インスタンスを使用して要素を反復処理できないため、const vector<int>& で機能するコードが壊れます。
テスト it != end は決して失敗しないため、これは 0 0 を出力してからクラッシュします。範囲ベースの for ループはもちろん機能しますが、このループは有効であるため、期待どおりに機能する必要があります。私は、同じコンテナの同じ範囲からのすべてのスパンが等しいので、これらのスパンのいずれかのイテレータが比較できると予想していました(もちろん、コンテナは変更されていません)。確かに、そうではないのには十分な理由があります。
だから私の質問は、そのようなビューを呼び出し元に見えてはならないコンテナのような配列の要素に返す最良の方法は何ですか.
c++ - CMake で GSL Lite と Microsoft GSL を選択するにはどうすればよいですか?
たとえば、を使用する C++ コードを書いていますgsl::span
。現在、 Microsoft/Neil Macintosh の GSLか、Martin Moene のGSL Liteを使用できるようにしたいと考えています。構築したシステムとして CMake を使用して、どのようにそれを達成するのが最善でしょうか?