2012-06-06 60 views
0

我有一個問題。我有很多的代碼,使用ifstreams以這種方式:PhysFS可以使用ifstreams嗎?

例如:

bool AudioManager::_loadSounds(const std::string& path, const std::string& appendPath) 
{ 
    //open the file 
    std::ifstream ifs(path.c_str()); 

    //ensure it is open 
    if(!ifs.is_open()) 
    { 
     return false; 
    } 

    std::string line; 

    //read each sound 
    while(getline(ifs, line)) 
    { 

...

的問題是我需要的應用程序範圍內改變使用PhysFS。所有數據將保持結構相同的目錄明智,除了它將被分區到zip文件。

是否有一種簡單的方法可以將PhysFS應用於ifstream,以便我不需要修改所有這些類?

+0

兩個建議,與問題無關:1)'fstream'具有'std :: string'的構造函數 - 爲什麼要傳遞'.c_str()'? 2)'fstream'具有'operator bool()'定義;而不是'if(!ifs.is_open())',只用'if(ifs)'。 – Griwes

+1

@Griwes:採用'std :: string'的構造函數僅在C++ 11中。 –

+0

@JesseGood,恩,忘了提到這一點。無論如何,有沒有什麼理由現在不用'-std = C++ 11' /'0x'編譯? – Griwes

回答

2

有沒有簡單的方式來做到這一點。無論如何,你將不得不使用fstreams。但是,您可以繼續使用流,只需編寫一個std::streambuf派生的類來從PhysFS中提取其數據。這不是一件微不足道的事情,因爲streambuf對它來說有各種各樣的複雜性。但它肯定是可行的。

你可以帶任何istream衍生的類,並推入不同的streambuf

0

PhysFS是一個C庫,並沒有C++類型的概念。如果您想將PhysFS句柄視爲流對象,您將需要找到一個C++包裝器或編寫自己的包裝器。