>дело не в этом, а в том что когда ты пишешь либу, которая весит 100 Кб
извиняюсь за нескромный вопрос, но нах в либе локализация, особенно в либе такого размера? локализация должна сидеть в программе-фронтенде, использующей либу (а эти программы обычно больше или по-крайней мере могут позволить себе роскошь иметь системные зависимости)
>дело не в этом, а в том что когда ты пишешь либу, которая весит 100 Кб
извиняюсь за нескромный вопрос, но нах в либе локализация, особенно в либе такого размера? локализация должна сидеть в программе-фронтенде, использующей либу (а эти программы обычно больше или по-крайней мере могут позволить себе роскошь иметь системные зависимости)
1) честно говоря, я даже боюсь задать этот вопрос знатоку который мне затирает про то что потоки - это плохо потому, что нет локализации :)
2) есть таки задачи, так или иначе связанные с обработкой текстовой информации, там нужна, правда, не локализация, но работа с разными кодировками
На самом деле каждый байт в библиотеке iostreams - это говно. Конечно, сам язык С++ это тоже не фонтан какой ЯП, но iostreams это прямо таки полюс говняности С++. Можно делать наглядным пособием на тему того как не надо проектировть абстракции.
1. Открою страшную тайну — в printf'е тоже нет локализации, однако обернуть его tr'ом или gettext'ом вообще ничего не стоит, в отличие от ...
да что Вы к интернационализации так привязались? printf - не является объектно ориентированным, не является безопасным - уже достаточно
потоки же, вполне легальный инструмент в C++, гибкий и безопасный, имеющий более читаемый синтаксис (вспомним обучающихся) и я не пойму что конкретно Вас не устраивает в потоках кроме того что лично Вам они не нравятся
и да, тащить за собой Qt, знаете ли, далеко не всегда выход
2. А как тебя потоки спасут?
вот ведь мастер передёргивания, ну да ладно - std::wcout, если вы про это
это не имеет отношения к читаемому синтаксису, обучаемые не пишут сложных строк, максимум cout << a, им вероятно сложно запомнить, что %i это int, а %f это float :)
того что лично Вам они не нравятся
Не только мне, я вообще живьем не видел ни одного человека, которому бы нравился этот ужас, поэтому могу только сделать вывод, что Вы троллите.
не является объектно ориентированным, не является безопасным - уже достаточно
решения имеющие понятный синтаксис аналогичный printf'у и не обладающие этими недостатками я привел
ну да ладно - std::wcout, если вы про это
бугага, wstring еще и некроссплатформенный ужас, проще glib взять или написать свой парсер utf-8, благо пишется быстро и просто.
это не имеет отношения к читаемому синтаксису, обучаемые не пишут сложных строк, максимум cout << a, им вероятно сложно запомнить, что %i это int, а %f это float :)
и снова это Ваши предположения пояснить же в чём страх сложных строк Вы не можете, кроме того что Вам на них страшно смотреть
Не только мне, я вообще живьем не видел ни одного человека, которому бы нравился этот ужас,
и что это доказывает?
поэтому могу только сделать вывод, что Вы троллите.
глупо
> не является объектно ориентированным, не является безопасным - уже достаточно
решения имеющие понятный синтаксис аналогичный printf'у и не обладающие этими недостатками я привел
во-первых синтаксис аналогичный printf провоцирует небезопасность, ибо __VA_ARGS__
во-вторых не всегда удобно тащить с собой толстые либы
> ну да ладно - std::wcout, если вы про это
бугага, wstring еще и некроссплатформенный ужас,
это не всегда критично, но что уж говорить - есть такое
проще glib взять или написать свой парсер utf-8, благо пишется быстро и просто.
да, именно так, но к теме std::cout vs printf это отношения не имеет
> это всего лишь Ваши слова, не подкреплённые ничем
Еще раз для тех кто в танке — в случае printf'а выводимое СРАЗУ видно по строке форматирования.
Удобство и читабельность iostream'а ничем не подтверждена, от Вас не было НИ ОДНОГО аргумента насчет читабельности, кроме того, что Вам это якобы удобно.
во-первых синтаксис аналогичный printf провоцирует небезопасность, ибо __VA_ARGS__
4.2 , в QString __VA_ARGS__ не используется.
это не всегда критично, но что уж говорить - есть такое
критично, тем более синтаксис команд преобразования ужас похлеще синтаксиса iostream
Прочитайте уже http://yosefk.com/c++fqa/io.html и покиньте тред. Кроме того, я на ЛОР-е писал собственные соображения о дизане iostreams, можно нагуглить при желании.
>случае printf'а выводимое СРАЗУ видно по строке форматирования.
В случае cout выводимое прекрасно видно. Гораздо лучше, чем бессмыслица в стиле перла в printf.
Как это сделать со (f)scanf и (f)printf?
template<typename T>
class X
{
T t;
Vector v;
Quaternion q;
////////////////
void Read(istream& is)
{
is >> t >> v >> q;
}
void Write(ostream& os)
{
os << t << v << q;
}
};
>похоже на исповедь лузера-неосилятора и, кагбэ, фраза «C++ classes look pretty surreal» на то непрозрачно намекае
Какая исповедь? Убогость iostreams отлично показана в примерах.
после того феерического в своей бредовости троллинга который ты привёл по ссылке
Ты не понимаешь что такое троллинг. То что я пишу вещи которые не нравятся лично тебе не означают что я пытаюсь тебя как-то обидеть или спровоцировать флейм. Я наоборот хочу заткнуть этот тред достигнувший неприличного размера в пять страниц разгромив аргументацию любителей непрактичной и бесполезной библиотеки.
> это всего лишь Ваши слова, не подкреплённые ничем
Еще раз для тех кто в танке — в случае printf'а выводимое СРАЗУ видно по строке форматирования.
это плюс, но формат записи - это минус
Удобство и читабельность iostream'а ничем не подтверждена, от Вас не было НИ ОДНОГО аргумента насчет читабельности, кроме того, что Вам это якобы удобно.
читать Вы не умеете, но для Вас персонально (!) повторю, люди изучающие программирование считают синтаксис потоков куда более читаемым, нежели синтаксис формата printf
и это не потому что они не имеют опыта, а потому что они не не так предвзято смотрят на вещи, как некоторые
> во-первых синтаксис аналогичный printf провоцирует небезопасность, ибо __VA_ARGS__
4.2 , в QString __VA_ARGS__ не используется.
oh yeah? а это что?
QString("%1 %2 %3").arg(1).arg(2).arg(3)
полный и прямой аналог
что и следовало ожидать, как и положено троллю - в вопросе Вы не разбираетесь
синтаксис команд преобразования ужас похлеще синтаксиса iostream
во-первых фраза про классы («C++ classes look pretty surreal») уже характеризует человека как неосилятора
а во-вторых все т.н. доказательства приведённые по ссылке в основном связаны со спекуляциями и нечестными приёмами спора
про убогость iostream (кстати что такое iostreams? плохо знаешь то что обсуждаешь потому как с ним работаешь, да?) я ничего не увидел, возможно потому что прекратил читать после феерической фразу про классы, но уж извините данный человек себя дискредитировал
Ты не понимаешь что такое троллинг. То что я пишу вещи которые не нравятся лично тебе не означают что я пытаюсь тебя как-то обидеть или спровоцировать флейм.
не знаю что ты там себе думаешь, но пока что ты меня только посмешил :)
Я наоборот хочу заткнуть этот тред
матрос Железняк?
достигнувший неприличного размера в пять страниц разгромив аргументацию любителей непрактичной и бесполезной библиотеки.
хотеть не вредно - вредно не хотеть, пока ты только осилил показать своё неосиляторство, дав ссылку на человека который сильно предвзято разбирает то в чём не разобрался
Еще один «умник» ? За iostream'ом в примере стоит переопределение операторов <<, >> внутри которых делаются сложные вещи, так какой же тогда смысл использовать именно iostream и в чем тут простота?
Для этого boost::serialization есть вообще-то, который сложные вещи сделает за тебя.
Есть ещё готовые программы, которые сложные вещи уже сделают за тебя и без использования тобой C++ и прочих языков. Значит не будет примера? Слив засчитывать, «умник»?
>во-первых фраза про классы («C++ classes look pretty surreal») уже характеризует человека как неосилятора
Ну в Жаве классы это рантаймовая сущность. Так что с точки зрения программиста на жаве это так, например. В CLOS классы тоже немного помощней. Или плюсовое понимание ООП и классов - единственно верно?
во-вторых все т.н. доказательства приведённые по ссылке в основном связаны со спекуляциями и нечестными приёмами спора
Приведи хотя бы один пример нечестного ведения спора там.
хотеть не вредно - вредно не хотеть, пока ты только осилил показать своё неосиляторство
Итак, есть класс-шаблон и есть абстракная сущность для ввода и вывода в неё. Напиши пример без потоков С++ в рамках стандартного С++ чтобы всем было понятно какая замечательная вещь твои scanf и printf.
template<typename T>
class X
{
T t;
Vector v;
Quaternion q;
int i;
double d;
////////////////
void Read(istream& is)
{
is >> t >> v >> q >> i >> d;
}
void Write(ostream& os)
{
os << t << v << q << i << d;
}
};
>во-первых фраза про классы («C++ classes look pretty surreal») уже характеризует человека как неосилятора
Ну в Жаве классы это рантаймовая сущность. Так что с точки зрения программиста на жаве это так, например.
бггг, может оно и так :) я только одного не понимаю - почему программист на java с умным видом комментирует те моменты которые он не осилил в С++, выдавая это за недостатки языка :)
В CLOS классы тоже немного помощней. Или плюсовое понимание ООП и классов - единственно верно?
вообще-то и обратное тоже верно
и да, С++ действительно не единственный язык в котором есть классы, но ничего уж такого инопланеТЯНского ;) там нет, или не согласны?
в той же java отсутствие const порой сильно смущает, но это не является поводом называть java быдлоязычком с корявым синтаксисом, или нет?
>я только одного не понимаю - почему программист на java с умным видом комментирует те моменты которые он не осилил в С++, выдавая это за недостатки языка
Ты пиши конкретно: что он не осилил в С++?
в той же java отсутствие const порой сильно смущает
const не работает ни как хинт оптимайзера ни как диагностическое утверждение.
Приведи хотя бы один пример нечестного ведения спора там.
смотрите
(1) Why is type safety a good thing here - because we gain performance?
(2) The last time I checked, we didn't really gain any - your typical iostream implementation is slower and bulkier than your typical stdio implementation.
(3) Anyway, isn't I/O the bottleneck here?
нечестный метод - это
(1) зная заранее ответ говорить глупости про производительность
(2) говорить про то что когда я последний раз смотрел iostream он был медленней (когда он это последний раз смотрел? в 1999 или 2009, а может в 1980 году?), на каких задачах он смотрел? и что означает громоздкий (bulkier) - «more women, more wine» (с)? или ещё что?
(3) после пронзительных и драматичных рассуждений слиться сказав что на самом деле всё это не важно (но сомнение то уже мы заронили в том что iostream фигня, не так ли? жаль что действуют такие методы только на людей находящихся в начале пути)
Выводит 15. Долго от тебя ещё примера ждать со scanf и printf ?
#include <sstream>
#include <iostream>
using namespace std;
struct X
{
double m;
void read(istream & is)
{
is >> m;
}
void write(ostream & os)
{
os << m;
}
};
int main(void)
{
istringstream r("15");
X x;
x.read(r);
x.write(cout);
return 0;
}