問題タブ [c++11]
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++ - ラムダ式とスクリプト解析-これは良い設計アイデアですか?
私はいくつかの基本的な2Dシューティングゲームを作成しましたが、それらは、それらが進む限り、うまく機能します。プログラミングの知識に基づいて、いくつかのオブジェクトを制御するための単純なスクリプト言語を使用してゲームを拡張することにしました。目的は、ランダムオブジェクトの実際の制御ではなく、スクリプトパーサー/エグゼキュータを作成する設計の一般的なプロセスに関するものです。
したがって、私の現在の考え方は、ラムダ式のコンテナー(おそらくマップ)を利用することです。パーサーは各行を読み取るときに、式のタイプを判別します。次に、命令のタイプを決定し、処理する必要のある値を検出すると、式の種類へのマップを開き、処理する必要のある値を渡します。
多かれ少なかれ疑似コードの例は次のようになります。
では、このようなデザインについてどう思いますか?
c++ - 可変長のテンプレート引数リスト?
このようなことが行われているのを見たのを覚えています:
つまり、X は、テンプレート引数として渡された型名の可変長リストから継承します。もちろん、このコードは仮説です。
ただし、これに関する参照は見つかりません。出来ますか?C++0xですか?
c++ - C++ : has_trivial_X 型の特性
boost ライブラリは、今後の C++0x 標準のようですが、さまざまな型特性テンプレートを定義して、自明なコンストラクター、コピー コンストラクター、代入、またはデストラクタを持つオブジェクトと、持たないオブジェクトを区別します。これの最も重要な用途の 1 つは、たとえば memcpy を使用して、特定のタイプのアルゴリズムを最適化することです。
しかし、さまざまな has_trivial_X テンプレートすべての実際の実際の違いがわかりません。C++ 標準では、POD と非 POD という 2 つの広範なタイプのカテゴリのみが定義されています。コンストラクター、コピー コンストラクター、代入演算子、またはデストラクターが定義されている場合、型は非 POD です。つまり、組み込み型でないもの、または組み込み型の C 構造体ではないものは、POD ではありません。
では、たとえば has_trivial_assign と has_trivial_constructor を区別するポイントは何でしょうか? オブジェクトに自明でない代入演算子または自明でないコンストラクターがある場合、それは POD ではありません。では、オブジェクトに自明な代入演算子があるが、自明でないコンストラクタがあることを知っておくと、どのような状況で役立つのでしょうか?
言い換えれば、単一の型特性テンプレート を定義して、それでis_pod<T>
完了しないのはなぜでしょうか?
c++ - C++で可能な最大の配置を決定する
あらゆるタイプの可能な最大の配置を決定するためのポータブルな方法はありますか?
たとえば、x86では、SSE命令には16バイトの整列が必要ですが、私が知る限り、それ以上の命令は必要ないため、どのタイプでも16バイトに整列されたバッファーに安全に格納できます。
任意のタイプのオブジェクトを書き込むことができるバッファー(char配列など)を作成する必要があるため、整列するバッファーの先頭に依存できる必要があります。
他のすべてが失敗した場合、char配列を割り当てるとnew
最大の配置が保証されることはわかっていますが、TR1 / C ++ 0xテンプレートalignment_of
とaligned_storage
を使用すると、バッファーをインプレースで作成できるかどうか疑問に思います。動的に割り当てられた配列の追加のポインター間接参照を必要とするのではなく、クラス。
アイデア?
有界型のセットの最大アラインメントを決定するためのオプションがたくさんあることを理解しています。和集合、またはalignment_of
TR1からだけですが、私の問題は、型のセットが有界でないことです。どのオブジェクトをバッファに保存する必要があるかを事前に知りません。
c++ - Is it bad form to call the default assignment operator from the copy constructor?
Consider a class of which copies need to be made. The vast majority of the data elements in the copy must strictly reflect the original, however there are select few elements whose state is not to be preserved and need to be reinitialized.
Is it bad form to call a default assignment operator from the copy constructor?
The default assignment operator will behave well with Plain Old Data( int,double,char,short) as well user defined classes per their assignment operators. Pointers would need to be treated separately.
One drawback is that this method renders the assignment operator crippled since the extra reinitialization is not performed. It is also not possible to disable the use of the assignment operator thus opening up the option of the user to create a broken class by using the incomplete default assignment operator A obj1,obj2; obj2=obj1; /* Could result is an incorrectly initialized obj2 */
.
It would be good to relax the requirement that to a(orig.a),b(orig.b)...
in addition to a(0),b(0) ...
must be written. Needing to write all of the initialization twice creates two places for errors and if new variables (say double x,y,z
) were to be added to the class, initialization code would need to correctly added in at least 2 places instead of 1.
Is there a better way?
Is there be a better way in C++0x?
#xA;Output:
#xA;Alternative Copy Constructor:
#xA;c++ - C++0x でのローカリゼーション サポートの更新はありますか?
C++ ロケール ファセットを使用すればするほど、理解が深まります --- それらは壊れています。
std::time_get
--std::time_put
(C の strftime/strptime のように) 対称ではなく、AM/PM マークを使用して時刻を簡単に解析することはできません。- 私は最近、特定のロケール ( など) では、単純な数値の書式設定が不正な UTF-8 を生成する可能性があることを発見し
ru_RU.UTF-8
ました。 std::ctype
to upper/to lower が文字ごとに実行できると仮定すると、非常に単純化されています (大文字と小文字の変換により文字数が変わる可能性があり、コンテキストに依存します)。std::collate
-- 照合強度 (大文字と小文字を区別するか区別しないか) をサポートしていません。- 時刻のフォーマットでグローバル タイムゾーンとは異なるタイムゾーンを指定する方法はありません。
そして、はるかに...
- C++0x の標準ファセットで何らかの変更が予想されるかどうかを知っている人はいますか?
- そのような変化の重要性をもたらす方法はありますか?
ありがとう。
編集:リンクにアクセスできない場合の説明:
std::numpunct
桁区切り記号を char として定義します。そのため、U+2002 のセパレーターの場合、異なる種類のスペースは、UTF-8 では単一の文字として再現できず、複数のバイト シーケンスとして再現できません。
C APIstruct lconv
では、3 桁区切りを文字列として定義しているため、この問題は発生しません。そのため、UTF-8 ロケールで ASCII 以外のセパレーターを使用して数値をフォーマットしようとすると、無効な UTF-8 が生成されます。
ru_RU.UTF-8
このバグを再現するには、ロケールが埋め込まれた std:ostream に 1234 を書き込みます
EDIT2: POSIX C ローカリゼーション API の方がはるかにスムーズに動作することを認めなければなりません。
- strftime の逆があります -- strptime (strftime は と同じです
std::time_put::put
) - 上記の点により、数値の書式設定に問題はありません。
しかし、それはまだ完璧であるためです。
EDIT3: C++0x に関する最新のメモによるstd::time_get::get
とstrptime
、std::time_put::put
.
c++ - constexprとエンディアン
C ++プログラミングの世界で時々出てくる一般的な質問は、コンパイル時のエンディアンの決定です。通常、これはほとんど移植性のない#ifdefで行われます。しかし、C ++ 11constexpr
キーワードとテンプレートの特殊化は、これに対するより良い解決策を提供しますか?
次のようなことを行うのは合法的なC++11でしょうか?
次に、両方のエンディアンタイプのテンプレートを特殊化します。
そして、次のことを行います。
c++ - std :: regex-リンクする必要のあるlibはありますか?
次のコードでリンカーエラーが発生します。
c++ - static_assert は何をしますか? また、何に使用しますか?
static_assert(...)
('C++11') が手の問題をエレガントに解決する例を教えてください。
私はランタイムに精通していassert(...)
ます。static_assert(...)
通常よりも優先するのはいつassert(...)
ですか?
また、 にboost
というものがありますがBOOST_STATIC_ASSERT
、 と同じstatic_assert(...)
ですか?