問題タブ [iostream]
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.
java - JNI インターフェースを介した出力ストリームの共有
JNI インターフェイスを介して C++ ライブラリを使用する Java アプリケーションを作成しています。C++ ライブラリは、タイプ のオブジェクトを作成します。これらのオブジェクトはFoo
、JNI を介して Java に適切に渡されます。
ライブラリに出力関数があるとします。
そして私は Java を持っていますOutputStream out
。Foo::print
出力が表示されるようにJavaから呼び出すにはどうすればよいout
ですか? JNIレイヤーでOutputStream
aを強制する方法はありますか? std::ostream
出力を JNI レイヤーのバッファーにキャプチャしてからコピーすることはできout
ますか?
c++ - どうすればcharバッファのパフォーマンスを向上させることができますか?
私はたくさんのデータを以下に読まなければなりません:
サードパーティのライブラリは、このデータを何度も読み取ります。毎ターン、シグネチャが次のようなコールバック関数を呼び出します。
現在、STLコンテナを使用してバッファコンテナを実装しています。ここで、新しいバッファを挿入して保存されたバッファを取得するためのメソッドinsert()
とが提供されています。getBuff
ただし、割り当てと割り当て解除を最小限に抑えることができるように、コードのパフォーマンスを向上させたいと考えています。
どうすればこれをよりパフォーマンスの高いものにすることができますか?
c++ - C++ の標準出力ストリームはスレッドセーフ (cout、cerr、clog) ですか?
現在のスレッドの概念がないことは知っていますがC++
、この記事では次のように述べています。
タイプセーフ、スレッドセーフ、移植可能な ロギングメカニズム
.....
関数はスレッドセーフであるため、
fprintf()
このログが別のスレッドから使用された場合でも、出力行がスクランブルされることはありません。
とcout
はどうですか?cerr
clog
この質問は、 や など、C++ のすべての種類のストリーム タイプにも当てはまると思いfstream
ますstringstream
。
c++ - stringstream 一時的な ostream リターンの問題
次のセクションでロガーを作成しています。
するという考えで:
これはすべて意図したとおりに機能しますが、そうすると:
それは動作しません:
通常の正しい文字列ではなく、ジャンク データを含む 'format' になります。
これは、 << 演算子によって返された一時的な ostream が、元の文字列ストリームよりも長生きするためだと思います。
それとも私が間違っていますか?
(string() がこのように機能するのはなぜですか?それは、それ自体への参照を返すためですか?私はそう仮定しています。)
リリースモードでログインするときに追加の割り当てを排除するので、私は本当にこの方法でやりたいと思っています。
この方法でそれを行うための指針やコツは大歓迎です。私の実際のソリューションでは、さまざまなログ関数があり、それらはすべてこれよりも複雑です。したがって、これを何らかの方法で呼び出し元のコードに実装することをお勧めします。(可能であれば #define を変更しないでください)
アイデアを与えるために、私の実際の #defines の 1 つの例を示します。
これは、char*、string()、および ostream() を取る可変引数の printf のようなログ関数と、string()、exception()、および HRESULT を取る非可変引数関数に一致します。
c++ - C++ にバイナリ メモリ ストリームはありますか
私は通常、stringstream
メモリ内の文字列に書き込むために使用します。バイナリモードでcharバッファに書き込む方法はありますか? 次のコードを検討してください。
のメモリは次のch
ようになります: 0x313233 - 文字 1、2、および 3 の ASCII コード。バイナリ値自体を書き込む方法を探しています。つまり、メモリに 0x010203 が必要です。問題は、関数を記述できるようにしたいということです
そして、使用するストリームの種類を外部で決定します。このようなもの:
何か案は?
c++ - iostream のような大きなインクルード ファイルは効率的ですか? (C++)
Iostream に含まれるすべてのファイル、それらに含まれるファイルなどを合計すると、約 3000 行になります。
画面に何かを出力するだけの機能しか必要としない hello world プログラムを考えてみましょう。
これは非常に単純なコードのはずですが、iostream はわずかなコードに 3000 行以上を追加します。では、これらの 3000 行以上のコードは、1 行を画面に表示するだけで本当に必要なのでしょうか? そうでない場合、関連する行を単純にコードにコピーした場合よりも効率の悪いプログラムが作成されるのでしょうか?
c++ - どの文字を空白として扱うかを iostream に教えてもらえますか?
たとえば、次のようなことができます。
通常、文字列をフォーマットする必要があります"01 22 42 18"
。これを行うために現在のロケールを直接変更できますか?
c++ - イテレータのペアによる文字列の初期化
イテレータで文字列を初期化しようとしていますが、次のようなものが機能します:
しかし、これはしません:
ありがとうございました。
c++ - 出力ストリームを構成して、出力が一度に複数の場所に送信されるようにするにはどうすればよいですか?
2 つ (またはそれ以上) のストリームを 1 つに構成したいと考えています。私の目標はcout
、 、cerr
、および に向けられたすべての出力clog
が、元のストリームとともにファイルに出力されることです。(たとえば、コンソールにログが記録された場合。閉じた後も、戻って出力を表示できるようにしたいと思います。)
私はこのようなことを考えていました:
これは簡単に思えます。main での呼び出しは次のようになります。
も見ましたboost::iostreams
が、関連するものは何もありませんでした。
これを達成するための他のより良い/より簡単な方法はありますか?