問題タブ [c++14]
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++ - unique_ptrs のセットの生ポインタ ルックアップ
次のようなコードを書きたいと思うことがよくあります。
ただし、ルックアップ関数には std::unique_ptr パラメーターが必要であるため、 std::set インターフェイスの多くは std::unique_ptrs では役に立たないものです (セット自体が所有しているため、これは明らかにありません)。
これには主に 2 つの解決策が考えられます。
ルックアップ用の一時的な unique_ptr を作成します。たとえば、上記の removeObject() は次のように実装できます。
/li>セットを、unique_ptrs への生のポインターのマップに置き換えます。
/li>
しかし、どちらも私には少しばかげているようです。解決策 1 では、erase() は noexcept ではないため、一時的な unique_ptr が実際には所有していないオブジェクトを削除する可能性があり、2 ではコンテナ用のストレージが不必要に 2 倍必要になります。
Boost のポインター コンテナーについては知っていますが、現在の機能は最新の C++11 標準ライブラリ コンテナーに比べて制限されています。
私は最近 C++14 について読んでいて、「異種比較ルックアップを連想コンテナーに追加する」に出くわしました。しかし、私の理解では、ルックアップ型はキー型に匹敵する必要がありますが、生のポインターはunique_ptrsに匹敵しません。
この問題を解決する、より洗練されたソリューションまたは C++ への今後の追加を知っている人はいますか?
c++ - constexpr を使用したコンパイル時の名前付きパラメーター イディオム
私は最近、名前付きパラメーターのイディオムが役立つ状況にかなりの数の状況に遭遇しましたが、コンパイル時に保証されることを望みます。チェーン内の参照を返す標準的な方法は、ほとんどの場合、ランタイム コンストラクター (Clang 3.3 -O3 でコンパイル) を呼び出すように見えます。
これを参照して何かを見つけることができなかったので、これを機能させようとしてconstexpr
機能的なものを手に入れました:
これは少数のパラメーターでは問題ありませんが、数が多い場合はすぐに混乱します。
より良い方法はありますか?多くの(30以上)パラメータを持つクラスでこれを行うことを検討していますが、将来拡張するとエラーが発生しやすくなるようです。
編集: C++1y タグを削除しました -- C++1y は問題を修正しているように見えますが (TemplateRex に感謝します!)、これは製品コード用であり、C++11 で立ち往生しています。それが無理なら、その通りだと思います。
EDIT2:これを探している理由を示すために、ユースケースを示します。現在、私たちのプラットフォームでは、開発者はハードウェア構成のビット ベクトルを明示的に設定する必要があります。これは問題ありませんが、非常にエラーが発生しやすくなっています。C99 拡張機能の指定された初期化子を使用しているものもありますが、これは問題ありませんが、標準ではありません。
ただし、ほとんどはこれを使用しておらず、数字の塊を入力しているだけです。したがって、実際の改善として、次のようなものに移行したいと思います (より良いコードを強制するため):
これははるかに冗長かもしれませんが、後で読むとはるかに明確になります。
c++ - aligned_storage のサイズをテストする
特定の型が に適合するかどうかをテストするためaligned_storage
に、次のテスト構造を作成しました。
今、そのようなテストが標準ライブラリに存在するかどうか、または存在するかどうか疑問に思っています。車輪の再発明は嫌いです。
これを使用して、定義されたaligned_storage
( size のBytes
) ヘッダーが内部データ型を取ることができるかどうかを確認しています。これは、実際のコンパイル単位でのみ使用できます。
c++ - C++1y/C++14: 変数テンプレートの特殊化?
C++1y/C++14 N3690 によると、変数テンプレートの特殊化の型は、プライマリ テンプレートの型と同じである必要がありますか?
もしそうなら、どういうわけかプライマリを未定義のままにすることは可能ですか?
これはドラフトのどこでカバーされていますか?
クラス テンプレートの同等の機能は次のようになります。
と
c++ - 解放された std::optional のハッシュは何ですか物体?
cppreference のこのページstd::hash
には、に特化した言及std::optional
がありますが、オブジェクトが解放されたときの動作は指定されていません。私はさまざまな行動を考えることができます:
std::bad_optional_access
一貫性を保つために、をスローする可能性がありますstd::optional::value
- 解放されたすべての に対して同じハッシュを返すことができ
std::optional<T>
ます。このようにして、解放された 2 つのオブジェクトは同じハッシュを持つことになります。 - それは返すことができます
std::optional<std::hash<std::optional<T>>>
c++ - c++1y 標準で biginteger に相当するものが導入されますか
少し前に、BigInteger の実装を c++0x 標準 (当時はそう呼ばれていた) に含める考えがあると聞いたのを覚えています。どうやらこれは起こらなかったようですが、これが c++1y の一部として計画されているかどうか疑問に思っていました。