1

我有个问题。我有很多以这种方式使用 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 应用于 ifstreams,这样我就不需要修改所有这些类?

4

2 回答 2

2

没有简单的方法可以做到这一点。无论如何,您将不得不不使用 fstreams。std::streambuf但是,您可以通过简单地编写一个从 PhysFS 中提取其数据的派生类来继续使用流。这不是一件小事,因为streambuf它具有各种复杂性。但这肯定是可行的。

您可以采用任何istream- 派生类并将不同的类推streambuf入其中。

于 2012-06-07T02:04:27.597 回答
0

PhysFS 是一个 C 库,没有 C++ 类型的概念。如果要将 PhysFS 句柄视为流对象,则需要找到 C++ 包装器或编写自己的包装器。

于 2012-06-06T22:14:04.523 回答