実際に私は最近、標準のC++ IOライブラリを勉強しました。私はLinuxマシンで開発したので、すべてうまくいきました。古いバージョンのGNU C++コンパイラではサポートされていないファイルio(file.exceptions(flags))の例外処理を使用していました。実際のデプロイメントマシンにはg ++の非常に古いバージョンがあります。おそらく2.9倍です。私はtry-catchの組に頼っている多くのコードを書いているので、私はデータレコーダーアプリケーションを書いています。私は今どうすればいい。私はstd :: exceptionから継承した例外を宣言しようとしました。できます。ヘッダファイルにfstreamをラップするのは良い考えですか?はいの場合、私はそれをどのようにしなければならないのですか?レガシーC++ IOライブラリと標準化IOライブラリの違い
答えて
すでにGNU & gccを使用しているので、GNU autotoolsの使用を開始することをお勧めします。このタイプの移植性の問題を解決することは、autotoolsの中心的な目的の1つです。
autotoolsは環境内の特定の機能の有無を示す#definesのセットを持つconfig.hという名前のファイルを生成します。 #ifdefタグを使用すると、プリプロセッサは、configureスクリプトが不要であるとみなすたびに古いコンパイラとの互換性のために書き込んだコードを除外することができます。
autotoolsを初めて使用するときは、ややこしい学習曲線ですが、それは一時的なコストです。彼らはあなたが着手するすべてのプロジェクトをより簡単にセットアップできるようにします。ターゲットマシンがオートツールをサポートしているかどうか、サポートされている場合はサポートされているツールも確認してください。
はいターゲットがオートツールをサポートしていますが、ここで回避策を見つけることができましたが、まだターゲットでテストしていません。私は答えとしてそれを掲示しています。例外はありますが、IOストリームライブラリではありません。 – NekDil
これは私の回避策、compatible.hファイルです:
#ifndef __COMPATIBLE
#define __COMPATIBLE
#include "exception.hpp"
#ifdef DEPRECATED_LYNX
namespace util
{
DECLARE_EXCEPTION(_Failure)
}
#define _failure util::_Failure
#else
#define _failure std::ifstream::failure
#endif // DEPRECATED_LYNX
#endif // __COMPATIBLE
これは私のcorespondingのcppファイルです:
#include "compatible.h"
#ifdef DEPRECATED_LYNX
DEFINE_EXCEPTION(util, _Failure)
#endif
私は初心者ですので、これは単なる回避策ですが、私が今必要手動で例外をスローするように、私はfstreamをラップしました。 badbit、failbit、eofbitに対する例外のスロー私はそれがどれほど良いか分かりません。
- 1. C標準ライブラリとC POSIXライブラリの相違点
- 2. C標準ライブラリとシステムコール
- 3. 推奨ScalaのIOライブラリ
- 4. mingW内の標準Cライブラリ
- 5. Visual C++標準ライブラリのキーワード
- 6. Cの成熟標準ライブラリ
- 7. JavaラインIOとC++ IO?
- 8. Calltree for C++標準ライブラリ
- 9. 異なるC++標準とリンクするC++標準ライブラリ
- 10. org.apache.commons:commons-ioとcommons-io:commons-ioの違いは何ですか?
- 11. 標準ライブラリ `FILE`タイプ
- 12. C標準ライブラリの内部作業
- 13. Cの標準データ構造ライブラリ?
- 14. C++標準ライブラリのboost :: optional alternative
- 15. C標準ライブラリの完全なオンラインリファレンス?
- 16. Visual C++標準ライブラリの警告
- 17. IOをC++で最適化
- 18. 標準ライブラリのLuaBindバインディング?
- 19. 標準ライブラリ以外のライブラリ名のldライブラリ検索パス
- 20. SBCL標準ライブラリのマニュアル?
- 21. Pythonの標準ライブラリでオーバーライドメソッド
- 22. IO-APIC-fasteoiとIO-APIC-edgeの相違点
- 23. はCARRIAGECONTROL = 'NONE'オプションの標準f90 IOですか?
- 24. PHPライブラリ/標準出力
- 25. ココアタッチ静的ライブラリ - 標準フレームワーク
- 26. 外部IOプログラムの標準出力と標準エラーを読み込み中にJava IO入力ストリームブロックが発生する
- 27. 非メインスレッドで非同期ioとdo ioの違いは何ですか?
- 28. C#Shell - IOリダイレクト
- 29. C#IO例外
- 30. C++ unicode file io
WOW、g ++ 2.9x !!! – AraK
この古いコンパイラを新しいバージョンより優先させない理由は何ですか? – Nawaz
@Nawazと同じ質問:なぜg ++の新しいバージョンに移行しないのですか? –