問題タブ [c++03]
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++ - std::map で std::auto_ptr を使用しても安全ですか?
特にSTLでは、自動ポインタ(およびその理由)に注意する必要があることを認識しています。しかし、私はこれに問題はありません:
これは安全ですか?
std::vector
アイテムを時々コピーする必要があるため、でどのように壊れるかがわかりますが、これは ? の値の型にも当てはまりstd::map
ますか?
編集:どうやら、安全かどうかに関係なく、(技術的に) マップにデータを入力することはできませんが、理論的な考慮事項のために質問を開いたままにします。それ以外の場合は、閉じていると見なします。
c++ - C++03 は C++ 標準の新しいバージョンですか、それとも C++98 の単なる技術正誤表 (TC) ですか?
C++03 は C++98 の技術的な正誤表ではなく、C++ 標準の新しいリリースであることをどこかの信頼できる情報源 (WG21 のページにあったと思います) で読んだことは確かです。
-std=c++98
しかし、それにもかかわらず、GCC やその他のコンパイラでは switchしか見られず、Alf P Steinbach は、実際には C++98 の TC である可能性があることを示唆するいくつかのコメントを作成しました。
では、「C++03」について書いているときは、C++98 について言及するだけで十分でしょうか? 関連する質問として、「C++03」という用語を使用するのは間違っていますか? 本当にC++98 TC1だと思うので、C++03と呼べないように思えます。C99TC3 リリースのために誰かが C07 を書いているのを見たことがないのと同じように。
c++ - 基本型ではなく派生型のインスタンス化を強制する
次のコードがあるとします。
変更できませんE
。
ここで、次があると仮定します。
またはの実装を一般的に変更せずに、 inの代わりに強制的にインスタンス化できる方法はありますか(C++03 で!) ?E
A::T
::T
E::foo
E::foo
E
注: 本当に必要な場合は、E
指定したもの (例: ) から継承することは許容されますA
が、私はそうしないことを好みます。
一般的な注意: はい、これは設計上の欠陥のようなにおいがしますが、他のすべての (より大きな!) 部分が美しく独立してうまく動作するように、統合コードの非常に小さな部分をわずかにハッキングするという意識的な決定を下しています。設計。
c++ - boost :: mplを使用して、「空」ではないテンプレートクラスの数を取得し、この番号でマクロを呼び出すにはどうすればよいですか?
boost::mpl::eval_if
空でないテンプレート引数の数を与えることができる(または同様の関数)の結果に応じて、いくつかの引数を使用してマクロを呼び出したいと思います。次のような擬似コードがあるとします。
引数の数に応じて、クラスをコンテンツで埋めようとしていますEmptyType
。Boost.MPL/プリプロセッサまたは他のBoostライブラリを介してC++03でそのようなことをどのように行うことができるのだろうか?
c++ - unique_ptr C++03 エミュレーションの move 関数
unique_ptr の C++03 エミュレーションがどのように実装されているかを理解しようとしています。unique_ptr は std::auto_ptr に非常に似ていますが、より安全です。auto_ptr が所有権を暗黙的に (つまり、黙って) 譲渡した場合、コンパイラ エラーを吐き出します。たとえば、単純な割り当て。関数move
は、エミュレートされた unique_ptr の安全性の背後にある鍵です。
質問:
- 移動機能が 3 つあるのはなぜですか?
参照を受け取り、それを右辺値に変換する 3 番目の move 関数は、次のように実装 (簡略化) されています。
/li>
上記のコードでは、T への明示的な変換は不必要に思えます。実際、Visual Studio 2010 は T への明示的な変換がなくても問題ありません。
ただし、g++、clang、Comeau は 2 番目のバージョンが好きではありません。unique_ptr<T>
これらのコンパイラは、パラメーターとして取るコンストラクターがないと文句を言いdetail_unique_ptr::rv<T>
ます。何故ですか?unique_ptr は、パラメーターとして受け取る (非明示的な) コンストラクターを既に定義してdetail_unique_ptr::rv<T>
います。それが自動的に取得されないのはなぜですか?
c++ - C ++ 03で可変個引数テンプレートをエミュレートするときに、クラスに異なるコードを含めることはできますか?
テンプレートの引数に応じて異なるコードでクラスを埋めようとしていますが、コンパイルエラーが発生します。私のコードは次のようなものです:
たくさんのエラーが発生します:
ここにライブコード。だから私は疑問に思います:C ++ 03で可変個引数テンプレートをエミュレートするときにクラス内に異なるコードを持つことは可能ですか?
c++ - constメンバーを持つ構造体のベクトル?
私が持っているとしましょう
では、どうすれば学生のベクトルを維持できますか?
これを行う方法はありますか、それともすべての学生をヒープに割り当て、代わりに各学生へのポインタを保存する必要がありますか?
c++ - ブーストなしの単純なラムダ式 C++03 など
特別なライブラリを使わずに、C++03 で基本的なラムダ式をシンプルかつエレガントでスマートな方法で実装する方法を教えてください。次のようなことができるようにする必要があります。
StackOverflow やインターネットの他の場所で多くのトピックを見てきましたが、残念ながら、役立つものは見つかりませんでした。もう 1 つのアイデアは、Boost の実装を注意深く検討することですが、残念ながら、私のレベルは今のところあまり適切ではありません。
前もって感謝します!
c++ - テンプレート引数が参照かどうかの確認[C++03]
C++03でテンプレート引数が参照型かどうかを確認したい。is_reference
( C ++ 11とBoostにはすでにあります)。
SFINAEと、参照へのポインターがないという事実を利用しました。
これが私の解決策です
それに関する特定の問題はありますか?誰かが私にもっと良い解決策を提供できますか?
c++ - 関数がインスタンス化される型を知らなくても、参照用に関数テンプレート内で is_reference を機能させる
ここにコードがあります
出力は、私が望まないもの0
でもあります。foo(c2)
内部で参照型foo
かどうかを確認するにはどうすればよいですか? つまり、関数がどのタイプでインスタンス化されているかわからないT
ため、呼び出したくありません。foo
foo<C&>(c2)