実際に私は最近、標準の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. C標準ライブラリとグリーンヒルズコンパイラ
- 4. slurm sbatch標準IOリダイレクト
- 5. 推奨ScalaのIOライブラリ
- 6. golang.orgパッケージと標準ライブラリの相違点
- 7. mingW内の標準Cライブラリ
- 8. Cの成熟標準ライブラリ
- 9. Visual C++標準ライブラリのキーワード
- 10. 標準ライブラリSTL in C++
- 11. Calltree for C++標準ライブラリ
- 12. 異なるC++標準とリンクするC++標準ライブラリ
- 13. .NET標準ライブラリと.NET標準
- 14. JavaラインIOとC++ IO?
- 15. python標準ライブラリ
- 16. サポートライブラリとAndroidの標準ライブラリ
- 17. 標準ライブラリのrbeginとend関数の違い
- 18. 標準ライブラリ `FILE`タイプ
- 19. Visual C++標準ライブラリの警告
- 20. fgetsのC標準ライブラリ関数
- 21. C標準ライブラリの完全なオンラインリファレンス?
- 22. Cの標準データ構造ライブラリ?
- 23. C++標準ライブラリのboost :: optional alternative
- 24. C標準ライブラリの内部作業
- 25. はC++ファイル内の標準ライブラリ
- 26. 標準ライブラリのLuaBindバインディング?
- 27. org.apache.commons:commons-ioとcommons-io:commons-ioの違いは何ですか?
- 28. IOをC++で最適化
- 29. 標準ライブラリ以外のライブラリ名のldライブラリ検索パス
- 30. msbuild builderror for .net標準ライブラリ
WOW、g ++ 2.9x !!! – AraK
この古いコンパイラを新しいバージョンより優先させない理由は何ですか? – Nawaz
@Nawazと同じ質問:なぜg ++の新しいバージョンに移行しないのですか? –