Может ли PhysFS использовать ifstreams?

У меня проблема. У меня есть много кода, который использует 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, чтобы мне не нужно было изменять все эти классы?

2 ответа

Решение

Нет простого способа сделать это. Независимо от того, что вам придется не использовать fstreams. Тем не менее, вы можете продолжать использовать потоки, просто написав std::streambufкласс, извлекающий свои данные из PhysFS. Это не тривиальная вещь, так как streambuf имеет различные биты сложности. Но это, безусловно, выполнимо.

Вы можете взять любой istreamкласс получен и засуну другой streambuf внутрь.

PhysFS - это библиотека C, которая не имеет понятия о типах C++. Вам нужно будет найти оболочку C++ или написать свою собственную, если вы хотите обрабатывать дескрипторы PhysFS как потоковые объекты.

Другие вопросы по тегам