2014-02-13 3 views
2

В LibC++ заголовка, <ios>, доступном для просмотра здесь:Где определение libC++ ios_base :: clear?

https://github.com/llvm-mirror/libcxx/blob/master/include/ios

есть два заявления class ios_base, то «libcpp версия» имеет метод clear, ios_base::clear() в то время как другие не делает. Это публичный метод и не описан здесь:

http://en.cppreference.com/w/cpp/io/ios_base

Кроме того, в реализации упомянутой выше, basic_ios::clear() вызовы ios_base::clear(), но это, кажется, не может быть определена в любом месте. В libstdC++ это реализуется, как можно увидеть здесь:

http://repo.or.cz/w/official-gcc.git/blob/HEAD:/libstdc%2B%2B-v3/include/bits/basic_ios.tcc

Так что мои вопросы:

1) почему существует общественный ios_base::clear() метод LIBC++?

2) Где я могу найти, как basic_ios::clear() реализован в libC++?

+1

Реализация 'ios_base :: clear()' находится в этом файле: https://github.com/llvm-mirror/libcxx/blob/master/src/ios.cpp#L265 – sth

+0

Спасибо. Я сомневаюсь. должен был найти это сам. Я полагаю, что метод 'clear()' как член 'ios_base' - это то, что разработчики lib ++ нашли удобным и могли, и так. – dpj

ответ

1

Думаю, вы можете обвинить меня в этом.

Я обнаружил, что выбрасывание исключения - это не что иное, как размер кода. И поэтому я хотел бы набросать функции, которые, когда это возможно, попадают в источники.

basic_ios::clear() должен иногда выдавать исключение и также является классом шаблона. Если я правильно помню, это меня раздражало, так как rdstate явно не зависит от параметров шаблона basic_ios: CharT, Traits. Таким образом, я реализовал rdstate в базовом классе (ios_base), так что любой связанный не-встроенный код мог бы использоваться всеми экземплярами basic_ios.

Как указано sty, ios_base::clear() реализован в src/ios.cpp. Объявлено protected в ios_base, а затем basic_ios::clear() - это всего лишь встроенная пересылка этой общей реализации.

В двух словах: «Почему» - это оптимизация размера кода.

+0

Так любопытно, как итераторы SCARY, но другая функция. – Puppy

+0

Да, точно. Это было написано, прежде чем я узнал, что такое СКАРЬЯ. Но мысль была одна и та же: нажмите код в зависимости от количества параметров шаблона, насколько это возможно (особенно код, который должен быть очерчен). С ИЕРАЦИЯми SCARY существует реальная функциональная выгода. Но здесь он был предназначен как чисто оптимизация размера кода. –

Смежные вопросы