Как бороться с несоответствием sstream и strstream старых компиляторов

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

10.12.2008 18:35:55
1 ОТВЕТ
РЕШЕНИЕ

Создать 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 в качестве основного способа работы).

2
10.12.2008 18:47:03
Я думал об этом, но я действительно хочу, чтобы код в основном выглядел как современный поток строк, и есть некоторые незначительные синтаксические различия.
Jesse Beder 10.12.2008 18:43:59
Я решил заняться созданием класса stringstream, который реализован с использованием strstream.
Jesse Beder 10.12.2008 19:18:59
Это путь, который я бы выбрал лично :)
Mehrdad Afshari 10.12.2008 19:20:32