我的問題是在經歷了一次挫折後,實際上我最近研究了標準C++ IO庫。我在Linux機器上開發,所以一切都很好。因爲我對文件io(file.exceptions(flags))使用了異常處理,而舊版本的GNU C++編譯器不支持它。實際的部署機器具有非常舊版本的g ++,可能是2.9倍的東西。我正在寫一個數據記錄器應用程序,因爲我寫了很多依賴於try-catch對的代碼。我現在應該怎麼做。我試過聲明一個從std :: exception繼承的異常。有用。將fstream封裝在頭文件中是一個好主意。如果是的話,我應該怎麼做,像繼承,或只是換行?遺留在傳統C++ IO庫和標準IO庫之間
4
A
回答
1
由於您已經使用linux & gcc,所以開始使用GNU autotools可能是個好主意。解決這種類型的可移植性問題是自動工具的核心目的之一。
自動工具將生成一個名爲config.h的文件,其中包含一組#define,用於指示環境中是否存在某些功能。 (在這種情況下,AC_CXX_EXCEPTIONS
很可能是您想要的檢查。)然後,您可以使用#ifdef標記讓預處理器排除您爲了與舊編譯器兼容而編寫的代碼,只要配置腳本發現它們不是必需的。
第一次使用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上拋出異常。我不知道它有多好。
相關問題
- 1. C++:如何將C庫文件IO轉換爲C++流IO?
- 2. OSGi和遺留庫
- 3. C標準庫和C POSIX庫之間的區別
- 4. 標準IO操作與標準
- 5. 非標準io重定向
- 6. IO-APIC-connector和IO-APIC-edge之間的區別
- 7. C標準庫和系統調用
- 8. Java線IO與C++ IO?
- 9. 簡化文件IO的庫
- 10. 嘲笑遺留庫
- 11. Perl的IO和Java IO
- 12. 系統:: IO ::目錄::在C++中的GetFiles
- 13. 是CARRIAGECONTROL ='無'選項的標準f90 IO?
- 14. 系統:: IO ::目錄:: GetDirectories( 「C:對C:\\」)
- 15. 來自標準IO的Iteratee輸入
- 16. slurm sbatch標準IO重定向
- 17. 傳統IO vs內存映射
- 18. xcodebuild和C標準庫
- 19. Go中定義的io庫在哪裏?
- 20. Python圖像庫IO錯誤:在draw.text
- 21. 如何在netty io庫中設置MSS
- 22. C#IO異常
- 23. FBX SDK和C++ IO [死機]
- 24. Haskell遠程文件IO庫(如kio)?
- 25. java.lang.NoSuchMethodError:org.apache.poi.util.IOUtils.copy(Ljava/io/InputStream; Ljava/io/OutputStream;)
- 26. Perl IO :: Socket/IO :: Select - 從「準備讀取」套接字讀取
- 27. Aspstate SQL Server數據庫鏡像高IO
- 28. C非標準庫
- 29. java執行之間的Java字符IO
- 30. IO字符串和IO數據類型
WOW,g ++ 2.9x !!! – AraK
不把舊的編譯器優先於新版本的原因是什麼? – Nawaz
與@Nawaz提出的問題一樣:爲什麼不轉向更新版本的g ++? –