2011-10-24 16 views
4

実際に私は最近、標準のC++ IOライブラリを勉強しました。私はLinuxマシンで開発したので、すべてうまくいきました。古いバージョンのGNU C++コンパイラではサポートされていないファイルio(file.exceptions(flags))の例外処理を使用していました。実際のデプロイメントマシンにはg ++の非常に古いバージョンがあります。おそらく2.9倍です。私はtry-catchの組に頼っている多くのコードを書いているので、私はデータレコーダーアプリケーションを書いています。私は今どうすればいい。私はstd :: exceptionから継承した例外を宣言しようとしました。できます。ヘッダファイルにfstreamをラップするのは良い考えですか?はいの場合、私はそれをどのようにしなければならないのですか?レガシーC++ IOライブラリと標準化IOライブラリの違い

+2

WOW、g ++ 2.9x !!! – AraK

+3

この古いコンパイラを新しいバージョンより優先させない理由は何ですか? – Nawaz

+0

@Nawazと同じ質問:なぜg ++の新しいバージョンに移行しないのですか? –

答えて

1

すでにGNU & gccを使用しているので、GNU autotoolsの使用を開始することをお勧めします。このタイプの移植性の問題を解決することは、autotoolsの中心的な目的の1つです。

autotoolsは環境内の特定の機能の有無を示す#definesのセットを持つconfig.hという名前のファイルを生成します。 #ifdefタグを使用すると、プリプロセッサは、configureスクリプトが不要であるとみなすたびに古いコンパイラとの互換性のために書き込んだコードを除外することができます。

autotoolsを初めて使用するときは、ややこしい学習曲線ですが、それは一時的なコストです。彼らはあなたが着手するすべてのプロジェクトをより簡単にセットアップできるようにします。ターゲットマシンがオートツールをサポートしているかどうか、サポートされている場合はサポートされているツールも確認してください。

+0

はいターゲットがオートツールをサポートしていますが、ここで回避策を見つけることができましたが、まだターゲットでテストしていません。私は答えとしてそれを掲示しています。例外はありますが、IOストリームライブラリではありません。 – NekDil

0

これは私の回避策、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に対する例外のスロー私はそれがどれほど良いか分かりません。

関連する問題