Как бороться с несоответствием sstream и strstream старых компиляторов - PullRequest
0 голосов
/ 10 декабря 2008

Я временно использую gcc 2.95.2, и вместо заголовка sstream он определяет (немного другой и устаревший) strstream. В настоящее время я обхожусь с этим с

#if __GNUC__ < 3       // or whatever version number it changes
#include <strstream>
#else
#include <sstream>
#endif

, а затем такие вещи, как:

#if __GNUC__ < 3
    strstream str;
    str << "Hello World";
#else
    stringstream str("Hello World");
#endif

но это становится действительно раздражающим. Я просто хочу убедиться, что когда я переключаюсь обратно на более свежий gcc (или другой компилятор), мне не нужно переписывать эти отрывки. Есть мысли?

1 Ответ

2 голосов
/ 10 декабря 2008

Создать mystream.h как

#ifndef mystream

#if __GNUC__ < 3       // or whatever version number it changes
#include <strstream>
#define mystream(x,y) strstream x; x << y;
#else
#include <sstream>
#define mystream(x,y) sstream x(y);
#endif

#endif

Затем используйте заголовок mystream.h и тип mystream.

Если вы действительно хотите, чтобы он выглядел как современный sstream, вы можете создать новый класс вручную (с помощью более нового исходного кода библиотеки std c ++ или вручную создав прокси-класс, который использует strstream в качестве основного способа работы).

...