пользовательские параметризованные манипуляторы

Я использую GCC 4.2.4.
Согласно Schildt, «C ++ The Complete Reference», 1995, пользовательские параметризованные манипуляторы должны быть определены как:

istream &mymanip(istream &stream, type param)
{
// here my code
return stream;
}
// overload
imanip<type> mymanip(type param){
return imanip<type>(mymanip, param)
}
// usage
cin >> mymanip(param);

Я считаю, что imanip (mymanip, param) должен возвращать объект, который содержит аргументы mymanip и mymanip. Это должно быть использовано перегруженным оператором >> для вызова mymanip. Однако это не работает, imanip не объявлен.

Я также найденный эта версия:

IMANIP(int) fld(int n){
return IMANIP(int)(fld,n);
}

что тоже не работает.

Мои вопросы:

  1. gcc 4.2.4 соответствует стандарту ANSI C ++ по этой детали или нет? Если да, то изменился ли стандарт с 1995 года в этом отношении?
  2. чтобы определить мои собственные параметризованные манипуляторы, мне нужно понять код iostream и написать свои собственные перегруженные функции imanip и operator >>?
  3. независимо от ответа на вопрос 2, какова лучшая стратегия для меня, чтобы понять код iostream? Должен ли я прочитать код? Как узнать имена скомпилированных библиотек, которые являются частью iostream? Должен ли я читать книгу?

Спасибо за ваше время.

2

Решение

Код, который вы разместили, кажется вне контекста. imanip выглядит как какой-то шаблон, но этот шаблон никогда не определяется нигде в вашем коде.

Но, честно говоря, я бы даже не подумал об использовании книги 1995 года по C ++. В 1995 году C ++ даже не был стандартизирован, хотя существовало «аннотированное справочное руководство». Вашей книге более 17 лет, что означает «более чем устаревший», когда речь заходит о языках программирования. С ++ с тех пор многое изменилось, вы должны подумать о покупке более новой книги, возможно, взглянуть на http://isocpp.org/get-started дать вам несколько примеров.

Чтобы дать вам более конкретные ответы на ваши вопросы:

  1. Да, gcc следует стандарту в этом отношении, но ваша книга может и не соответствовать, потому что она является предстандартной.
  2. Манипуляторы сделаны так, что вы делаете не должны переопределить оп<< и еще раз >> Однако, в зависимости от того, для чего предназначены ваши манипуляторы, вам может потребоваться вызвать некоторые методы более низкого уровня, предоставляемые потоком или streambuf.
  3. «Код» не существует, есть несколько разработчиков стандартных библиотек, и все они имеют свой собственный, иногда очень сложный код и т. Д. Я бы порекомендовал поискать в Интернете информацию о том, как работают эти библиотеки. Конечно, книга еще лучше. Подумайте о покупке «Стандартной библиотеки C ++» Н. Йосуттиса. Существует недавняя редакция, которая охватывает стандартную библиотеку «как сейчас, так и завтра», то есть включает в себя дополнения стандарта C ++ 11.
2

Другие решения

Ваша проблема — что-то читать Шильдтом. В будущем не тратьте впустую свои деньги на Bullschildt.

2

Я выучил «пользовательские параметризованные манипуляторы», прочитав их по порядку:

  1. http://www.horstmann.com/cpp/iostreams.html, Глава 3. Манипуляторы
  2. http://www.angelikalanger.com/Articles/C++Report/Manipulators1.pdf — повторяет предыдущее, но неплохо
  3. http://www.angelikalanger.com/Articles/C++Report/Manipulators2.pdf — так сложно, как вы могли бы спросить
0
По вопросам рекламы [email protected]