Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование параметризирующих манипуляторов, в самодельном классе 
:(
    Опции темы
EnergoHokum
Дата 14.5.2010, 06:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



В самодельный класс инкапсулирован std::stringstream. Хочется, чтобы к данному классу можно было применять все манипуляторы. Но вот с параметризующими манипуляторами (std::setioflags, std::setbase, std::setfill, std::setprecision, std::setw) у меня выходит непонимание.

Как пример: std::setw вот здесь имеет возвращаемый параметр smanip. Покопавшись в исходниках iostream выяснил, что это -- вообще структура с произвольным именем (у GCC своё, у MSVS своё).

Как организовать передачу таких манипуляторов std::stringstream-у?

Сам класс выглядит наподобие

Код

template <typename T> 
class Foo 

private: 
 typedef std::ios_base& (*iomp) (std::ios_base&); 
 std::stringstream sstr; 
public: 
 inline std::ios_base& operator << (iomp mp) 
 { return (sstr << mp); } 
 /* А вот что typedef-ать для, например, setfill? Я не знаю. */ 
};

PM MAIL ICQ   Вверх
GoldFinch
Дата 14.5.2010, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



EnergoHokum, посмотрите как сделан ostream

---------
фразу про typedef не понял %)
там шаблон надо применять, т.к. там не указатель на функцию, а функтор
PM MAIL ICQ   Вверх
EnergoHokum
Дата 14.5.2010, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



Цитата

посмотрите как сделан ostream


То есть, классу надо приделать 6 функций, каждая под отдельный манипулятор?
В <iomanip> GCC, по крайней мере, это выглядит так.

Код

  extern template ostream& operator<<(ostream&, _Setfill<char>);
  extern template ostream& operator<<(ostream&, _Setiosflags);
  extern template ostream& operator<<(ostream&, _Resetiosflags);
  extern template ostream& operator<<(ostream&, _Setbase);
  extern template ostream& operator<<(ostream&, _Setprecision);
  extern template ostream& operator<<(ostream&, _Setw);


Цитата

там шаблон надо применять, т.к. там не указатель на функцию, а функтор 


Отчего же функтор? И std::showpos (например), и std::setfill -- функции. Только манипуляторы базовыми флагами формата принимают и возвращают вполне себе ссылки на потоки ввода-вывода, а у параметризующих манипуляторов возвращаемое значение -- unspecified.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0949 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.