LINUX.ORG.RU
Ответ на: комментарий от Reset

давно printf не использовал, надеюсь всё правильно понял :)

Во первых это уже страшный ужас

понятно, слабые духом не используют stl :)

во вторых это всё неправильно [..] после запятой 16 знаков, ширина поля 23

fix:

std::cout << "A[" << std::setw(4) << i << "] = " << std::setw(23) << std::setprecision(16) << A[i] << std::endl;

В квадратных скобках пустые поля должны быть заполнены нулями

несущественная деталь, можно добавить std::setfill('0') и всё будет хорошо

> но в эту игру можно играть вдвоём, изобразите с помощью printf вот такое

а нахера?

понятно, значит не можете :) а вообще, хороший способ ведения спора - я теперь с Вами тоже так разговаривать буду :)

shty ★★★★★
()
Ответ на: комментарий от shty

> понятно, слабые духом не используют stl :)

stl используем во всю, а вот недоразумение под названием iostream - нет

несущественная деталь, можно добавить std::setfill('0') и всё будет хорошо

И будет еще больше нечитабельного кода.

понятно, значит не можете

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

Reset ★★★★★
()
Ответ на: комментарий от Reset

понятно, слабые духом не используют stl :)

stl используем во всю, а вот недоразумение под названием iostream - нет

так, записываем по буквам: н-и-а-с-и-л-и-л-и

будет еще больше нечитабельного кода.

он нечитабельный только для Вас, потому как опыта не хватает :)

> понятно, значит не можете

Я могу, только принципиально не буду этого делать.

охохо, во-первых, как с помощью printf Вы это сделаете - очень интересно :)

а Ваша аргументация такая классическая, классическая тролльская

shty ★★★★★
()
Ответ на: комментарий от shty

> охохо, во-первых, как с помощью printf Вы это сделаете - очень интересно :)

переопределит оператор приведения типа?

lester ★★★★
()
Ответ на: комментарий от shty

> так, записываем по буквам: н-и-а-с-и-л-и-л-и

Ты в машинных кодах программируешь? Нет? Значит тоже неасилил.

он нечитабельный только для Вас, потому как опыта не хватает :)

Бугага. Ты в машинных кодах программируешь? Нет? Видимо кому-то опыта не хватает.

Reset ★★★★★
()
Ответ на: комментарий от lester

> охохо, во-первых, как с помощью printf Вы это сделаете - очень интересно :)

переопределит оператор приведения типа?

ну и код в студию, плиз, я не представляю как, вот заодно и поучусь :)

shty ★★★★★
()
Ответ на: комментарий от lester

хотя конечно это бред, достаточно метод

lester ★★★★
()
Ответ на: комментарий от lester

printf( "...%s...", (char*) MyContaner );

а?? как вы класс приведёте к (char*)?

и не вижу конвертации в обратную сторону

shty ★★★★★
()
Ответ на: комментарий от lester

> а?? как вы класс приведёте к (char*)?

operator char*()

а, точно :)

> и не вижу конвертации в обратную сторону

«fprint или cout»

не понял

shty ★★★★★
()
Ответ на: комментарий от lester

да разговор начался с того что «фигня Ваш std::cout, я пользуюсь printf», некоторые товарищи тут не согласились, дальше по теме :)

на мой взгляд фишка в том что парадигма потоков (и в частности istringstream и ostringstream на которые был намёк) является более предпочтительной при использовании С++, в отличие от...

shty ★★★★★
()
Ответ на: комментарий от shty
std::cout << "A[" << std::setw(4) << i << "] = " << std::setw(23) << std::setprecision(16) << A[i] << std::endl;

уж слишком много кода, тяжело отделить вывод от форматирования, не наглядно. Теряется красота кода.

Zodd ★★★★★
() автор топика
Ответ на: комментарий от Zodd
std::cout << "A[" << std::setw(4) << i << "] = " << std::setw(23) << std::setprecision(16) << A[i] << std::endl;

уж слишком много кода, тяжело отделить вывод от форматирования, не наглядно. Теряется красота кода.

всё что Вы назвали - очень субъективно, от отсутствия опыта Вам все эти буквы кажутся страшными и непонятными

не буду Вас убеждать, но вот мой Вам совет (Вы его вольны проигнорировать :)) - осильте концепцию потоков (на практике, желательно) и, возможно, Вы почувствуете логику и красоту подобного подхода

shty ★★★★★
()
Ответ на: комментарий от JackyTreehorn

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

lester ★★★★
()
Ответ на: комментарий от JackyTreehorn

>Быдлокодер детектед.

На самом деле каждый байт в библиотеке iostreams - это говно. Конечно, сам язык С++ это тоже не фонтан какой ЯП, но iostreams это прямо таки полюс говняности С++. Можно делать наглядным пособием на тему того как не надо проектировть абстракции.

Absurd ★★★
()
Ответ на: комментарий от Absurd

>На самом деле каждый байт в библиотеке iostreams - это говно

Я не изучал их код, но пользоваться удобно

annulen ★★★★★
()
Ответ на: комментарий от annulen

>>На самом деле каждый байт в библиотеке iostreams - это говно

Я не изучал их код, но пользоваться удобно

Что такое «удобно»? Удобство локализации приложения - это важный фактор?

Absurd ★★★
()
Ответ на: комментарий от LamerOk

>что будет течь?

Ну для объекта определено приведение к char* - указателю символы. Что стоит ожидать от такого приведения? Выделение памяти, запись туда некоторой строки и возвращение указателя. Указатель нигде не сохраняется и память под строку благополучно течет.

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

> Для char? ;)

Продолжаем тупить? ;)

Указатель нигде не сохраняется


Не надо по себе судить о других.

Что стоит ожидать от такого приведения?


Весьма своеобразные ожидания от плюсов и программистов на нём. ))

LamerOk ★★★★★
()
Ответ на: комментарий от LamerOk

>Давай наоборот. ))

Ты напиши пример, где память будет течь, и мы посмеемся. )))

Давай ты не будешь мне грубить?

Waterlaz ★★★★★
()
Ответ на: комментарий от LamerOk

>Давай наоборот. ))

Ты напиши пример, где память будет течь, и мы посмеемся. )))

Тем более, что так не делается. Я говорю, что сделать безопасное приведение с char* нельзя. Ты говоришь, что можно и просишь меня сделать нечто неработающее.

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

> Давай ты не будешь мне грубить?

Я тебе еще не грубил. Если ты, конечно, не воспринимаешь перспективу того, что над твоим кодом могут похихикать, как личное оскорбление.

LamerOk ★★★★★
()
Ответ на: комментарий от Waterlaz

> Я говорю, что сделать безопасное приведение с char* нельзя. Ты говоришь, что можно и просишь меня сделать нечто неработающее.

Ну тут варианта два. Либо ты сам допрешь, либо кто-нибудь еще влезет и всё тебе растолкует. Тем более, что объяснять то нечего. Всё уже разжевано до неприличия.

LamerOk ★★★★★
()
Ответ на: комментарий от Waterlaz

> мб тогда я не буду гадать

У нас свободная страна.

LamerOk ★★★★★
()
Ответ на: комментарий от LamerOk

Ну значит буду гадать. ИМХО варианта тут два.

1) либо память течет.

2) либо объект будет тягать с собой строку до своего уничтожения.

Оба варианта говно.

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

Оба варианта говно.

первый вообще не вариант :), поэтому кстати я не пользуюсь ни printf, ни cout, а завел себе несколько функций и классов:

LString str = "*************"; 
 
Log( Format( "Hello %d", 100 ) ); 
LogError( "ops" ); 
Log( "ops again", ltLOG_ERROR ); 
Log( Format( "%s", str ), myLOG_LEVEL ); 
... 
theLogManager->SetTarget( myCustomLogTarget ); 
theLogManager->AddConsoleTarget(); 
theLogManager->AddFileTarget( "/var/log/file.txt" ); 
theLogManager->AddFileTarget( "/var/log/file2.txt", myLOG_LEVEL ); 
... 

что позволяет и форматировать, и разделять логи и дублировать в разные места

lester ★★★★
()
Ответ на: комментарий от lester

>первый вообще не вариант :), поэтому кстати я не пользуюсь ни printf, ни cout, а завел себе несколько функций и классов:

Разумно в общем =)

Waterlaz ★★★★★
()
Ответ на: комментарий от lester

>уже спрашивали про локализацию, как ее сделать с потоками?

и часто приходится писать что-то в потоки, предназначенное для восприятия человеком?

anonymous
()
Ответ на: комментарий от anonymous

в потоки нет, в логи( в том числе на экран ) - да

lester ★★★★
()
Ответ на: комментарий от lester

А как это всё связано с потоками и т.п.? Это совершенно отдельная задача формирования строк, напрямую не связанная вводом-выводом.

anonymous
()
Ответ на: комментарий от anonymous

мне казалось, что тут обсуждался именно вопрос форматирования, а не, что красивее: «printf( s )» или «cout < s» ;)

lester ★★★★
()
Ответ на: комментарий от anonymous

> Разделять надо задачи, разделять

здорово конечно :) именно это выше я и показал со своим «Format(...)», на что мне сказали, что с потоками это делается удобнее - хочется увидеть, чем же?

lester ★★★★
()
Ответ на: комментарий от JackyTreehorn

код давай, говорю, чтоб было видно разницу - насколько это «удобней»(с)

lester ★★★★
()
Ответ на: комментарий от JackyTreehorn

> Пускай просвещается.

ну ты и тупень :) давай пример - и сравним читабельность + объем кода

lester ★★★★
()
Ответ на: комментарий от lester

очевидно же, что для перевода с одного языка на другой задачу не решить без ключиков внутри строки. Это должна быть отдельная задача, не связанная с вводом-выводом, который лучше гораздо на потоках делается.

anonymous
()
Ответ на: комментарий от JackyTreehorn

п%здец :) еще раз, вот строка кода с printf:

printf( _(«item %1 of %2»), i, n );

давай свой вариант с потоками - это не больно

lester ★★★★
()
Ответ на: комментарий от anonymous

> Это должна быть отдельная задача, не связанная с вводом-выводом

я ж не спорю :) но этот JackyTreehorn упорно твердит, что он знает более удобный способ написать ту строку, что я привел в предыдущем сообщении - пусть показывает

lester ★★★★
()
Ответ на: комментарий от anonymous

он вроде как защищал именно форматирование в формате «<< ... << ...»

lester ★★★★
()
Ответ на: комментарий от lester

Ты еще не лопнул от бесконечных передергиваний? ;) Это ты свел все на i18n, я утверждал, что потоки в принципе более удобны и надежны.
Кстати, я не видел твой код в ответ на это:
http://www.linux.org.ru/jump-message.jsp?msgid=4674711&cid=4681925
Это не больно (с)

JackyTreehorn
()
Ответ на: комментарий от JackyTreehorn

> printf( _(«item %d of %d\n»), i, n );

cout << msgs.get (cat, 1, CODE1, def) << i << msgs.get (cat, 1, CODE2, def) << n << endl;


да, несомненно второй вариант и читабельней, и компактней, и уж точно быстрей работает - я был не прав

lester ★★★★
()
Ответ на: комментарий от JackyTreehorn

> Кстати, я не видел твой код в ответ на это:

а я что-то писал про scanf? о_О, речь шла про форматированный вывод

lester ★★★★
()
Ответ на: комментарий от JackyTreehorn

В разных языках может быть разная последовательность. Поэтому даже чистый printf задачу не решит, не говоря уже про cout << msgs.get (cat, 1, CODE1, def) << i << msgs.get (cat, 1, CODE2, def) << n;

Строка «item %1 of %2» может превратиться в строку «%2 %1 jskj rgfgfd fv dfvdv»

Поэтому и должно быть полное разделение задачи перевода строк и задачи вводы-вывода.

anonymous
()
Ответ на: комментарий от anonymous

Поэтому и должно быть полное разделение задачи перевода строк и задачи вводы-вывода.

что опять же я в своем примере и показывал, на что JackyTreehorn мне сказал - что:

cout << msgs.get (cat, 1, CODE1, def) << i << msgs.get (cat, 1, CODE2, def) << n << endl;

это верх удобства, а я быдлокодер, т.к. это не понимаю :)

lester ★★★★
()
Ответ на: комментарий от lester

Ты тролль-быдлокодер ;) Чтобы тебя утешить, я признаю, что твой вариант в этом случае более удобный, краткий и все такое.

JackyTreehorn
()
Ответ на: комментарий от JackyTreehorn

> Ты тролль-быдлокодер ;) Чтобы тебя утешить, я признаю, что твой вариант в этом случае более удобный, краткий и все такое.

я аж боюсь предположить, какой уровень надо иметь, чтоб слить троллю быдлокодеру ;)

lester ★★★★
()
Ответ на: комментарий от JackyTreehorn

На некорректный вопрос, некорректный же ответ, лови:

template<typename T> 
class X 
{ 
  T t; 
  Vector v;  
  Quaternion q; 
 
//////////////// 
 void Read(FILE * f) 
  { 
    t.Read(f);
    v.Read(f);
    q.Read(f);
  } 
  void Write(FILE * f) 
  { 
    t.Write(f);
    v.Write(f);
    q.Write(f);
  } 
};

кстати хочу увидеть ответ вот на это [Срач]Что вы предпочитаете: fprint или cout ? (комментарий) , а то анонимус позорно слил и не ответил

Reset ★★★★★
()
Ответ на: комментарий от JackyTreehorn

> Где ты увидел слив?

«я признаю, что твой вариант в этом случае более удобный, краткий и все такое.» - так это был сарказм такой? на самом деле ты до сих пор считаешь, что твой вариант лучше, да?

lester ★★★★
()
Ответ на: комментарий от Reset

Мне приходилось искать ошибки в коде, которые были из-за printf и которые бы никогда не случились с потоками. Так что подвесь себя сам.

JackyTreehorn
()
Ответ на: комментарий от JackyTreehorn

> Мне приходилось искать ошибки в коде, которые были из-за printf и которые бы никогда не случились с потоками. Так что подвесь себя сам.

а примеры будут?

lester ★★★★
()
Ответ на: комментарий от JackyTreehorn

> Ты путаешь char* с const char*.

Ну ок, тогда покажи ты, _ГДЕ_ будет утечка. )))

LamerOk ★★★★★
()
Ответ на: комментарий от anonymous

Там же, где и в исходном примере показаны «преимущества» потоков перед printf'ом, то есть нигде. А вот недостаток, который несет эта мнимая «простота» потоков я привел.

Reset ★★★★★
()
Ответ на: комментарий от lester

Все ошибки выявляет компилятор. Нет возможности вывести в поток- не будет откомпилирована программа. А с printf всё будет известно только в процессе работы программы.

anonymous
()
Ответ на: комментарий от lester

Reset как минимум не утверждал, что так лучше - он просто не ответил на вопрос

//fixed

shty ★★★★★
()
Ответ на: комментарий от anonymous

А с printf всё будет известно только в процессе работы программы.

 
double d;
printf( "%d%d", d );

ну не совсем так, вот ругательства на такой код в VC2010:

Non-integer passed as parameter '2' when integer is required in call to 'printf': if a pointer value is being passed, %p should be used

Missing integer argument to 'printf' that corresponds to conversion specifier '2'

Using uninitialized memory 'd': Lines: 6, 7

lester ★★★★
()
Ответ на: комментарий от lester

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

anonymous
()
Ответ на: комментарий от shty

>ну зачем ты опять этот ущербный faq тащишь сюда???

Есть чего возразить по поводу поинта по ссылке? Нет? Ну и молчи.

Absurd ★★★
()
Ответ на: комментарий от JackyTreehorn

> Меньше аргументов, чем в строке форматирования => undefined behavior.

работает все нормально - и gcc и msvc

lester ★★★★
()
Ответ на: комментарий от Absurd

>ну зачем ты опять этот ущербный faq тащишь сюда???

Есть чего возразить по поводу поинта по ссылке?

да было б чему там возражать - то лузеры вайнят что кактус горький, ты лучше не ориентируйся на неосиляторов (козлёночком станешь), а читай как делают профессионалы

если ты не осилил ссылки на apachedev вот тебе туториал попроще

после того как осилишь разрешаю посмотреть ссылку на apachedev, которую тебе уже давали

shty ★★★★★
()
Ответ на: комментарий от JackyTreehorn

Я же сказал, что на некорректный вопрос некорректный ответ. Поставь X<double>x и твое «решение» тоже отсосет.

Reset ★★★★★
()
Ответ на: комментарий от JackyTreehorn

> Это у тебя в песочнице, а у меня в real world legacy program стек был порублен.

просто ты идиот, который не пользуется нормальными решениями и пишет корявый и падучий код

lester ★★★★
()
Ответ на: комментарий от JackyTreehorn

Страшный тоже ;)

вовсе и не страшный, просто язык сравнительного низкого уровня и программировать на нём - не клопов давить, требует определённой квалификации от программиста, да

это тот же случай когда человек пописал код на Qt и считает что он профессионал в С++, а это далеко не так

shty ★★★★★
()
Ответ на: комментарий от shty

>да было б чему там возражать - то лузеры вайнят что кактус горький, ты лучше не ориентируйся на неосиляторов (козлёночком станешь), а читай как делают профессионалы

По ссылкам нет ничего по теме. Прочитай что пишет Alexander E. Patrakov еще раз.

Absurd ★★★
()
Ответ на: комментарий от JackyTreehorn

> Тебя в школе читать научили, быдлокодер? ;)

для тебя «быдлокодер» - был бы комплимент после твоих высеров в «коде»

lester ★★★★
()
Ответ на: комментарий от Absurd

По ссылкам нет ничего по теме.

а, даже так :) ну ничего, ничего мальчик, вот возьми яблочко, иди к маме

shty ★★★★★
()
Ответ на: комментарий от Absurd

Прочитай что пишет Alexander E. Patrakov еще раз.

зачем мне читать выс@р недоучки второй раз, я с первого раза понял кто он :)

я лучше Джосьютиса почитаю

shty ★★★★★
()
Ответ на: комментарий от shty

>а, даже так :)

Какое отношение имеют какие-то унылые бандлы ресурсов к той конкретной претензии которую написал Alexander E. Patrakov ?

Absurd ★★★
()
Ответ на: комментарий от JackyTreehorn

> Идиот - твой папа

вот ты и показал свою гнилую душонку - опускаться до оскорблений родственников могут только закомплексованные задроты от бессилия

lester ★★★★
()
Ответ на: комментарий от Absurd

Какое отношение имеют какие-то унылые бандлы ресурсов к той конкретной претензии которую написал Alexander E. Patrakov ?

не, ну вот ты бурятский буратина :)

printf, iostream and internationalization

а теперь внимательно присмотрись к тем самым «бандлам и ресурсам» :)

shty ★★★★★
()
Ответ на: комментарий от shty

>а теперь внимательно присмотрись к тем самым «бандлам и ресурсам» :)

Неужели бандлы содержат сообщения целиком, вместе с «подвижными частями» этих самых сообщений?

Absurd ★★★
()
Ответ на: комментарий от JackyTreehorn

> Выдает 3.14159.

Называется смотрим в книгу - видим фигу. Может тебе еще рассказать что такое число pi и чему оно равно ?

ЧЯНТД?

видимо ты до сих пор школу не окончил, раз не можешь понять чтож ты делаешь не так

Reset ★★★★★
()
Ответ на: комментарий от Reset

Может тебе еще рассказать что такое число pi и чему оно равно ?

расскажи, расскажи, только все цифры после запятой не забудь написать, чтобы без усечения получилось

а пока будешь писать, подумай вот над этим:

#include <iostream>
#include <cmath>

const double m_pi = 2*acos(0.0);

int main(void) 
{
	std::cout << m_pi << std::endl;
	return 0; 
} 

output: 3.14159
shty ★★★★★
()
Ответ на: комментарий от shty

Прежде чем так позориться, советую вспомнить какая точность у типа double. Представляю, сколько бы Вы 2.71бались с отладкой в попытках понять где же теряется точность.

Reset ★★★★★
()
Ответ на: комментарий от jtootf

>всем нам срочно нужна монада Writer и класс типов Show

Сперва плюсам нужны классы типов =)

Waterlaz ★★★★★
()
Ответ на: комментарий от Reset

Прежде чем так позориться, советую вспомнить какая точность у типа double.

ололо, прекрасно помню, Вы же вспомните что iostream type safe, а не idiot safe

Представляю, сколько бы Вы 2.71бались с отладкой в попытках понять где же теряется точность.

это Ваш удел (по себе вижу судите), подобные вещи, даже если и случаются, легко отлавливаются unittest'ами

shty ★★★★★
()
Ответ на: комментарий от shty

> ололо, прекрасно помню, Вы же вспомните что iostream type safe, а не idiot safe

а раз прекрасно помните, то зачем даете нерабочий пример?

Reset ★★★★★
()
Ответ на: комментарий от Reset
  ostringstream os;
  os << setprecision(100);
  os << M_PI;
  cout << "os: " << os.str() << endl;

  istringstream is(os.str());
  X1 x;
  x.read(is);
  cout << setprecision(100) << "x.m = " << x.m << endl;
  x.write(cout);
  cout << endl;

Вывод:

os: 3.141592653589793115997963468544185161590576171875
x.m = 3.141592653589793115997963468544185161590576171875
3.141592653589793115997963468544185161590576171875
Что теперь не так, сын идиота?

JackyTreehorn
()
Ответ на: комментарий от JackyTreehorn

ты опять обосрался, потому что

1. double 16 знаков, а не 100

2. коли сохраняешь состояние класса, то настраивай запись в поток внутри функции сохранения

3. ты конченный идиот, раз не понимаешь таких элементарных вещей

Reset ★★★★★
()
Ответ на: комментарий от Reset

> ололо, прекрасно помню, Вы же вспомните что iostream type safe, а не idiot safe

а раз прекрасно помните, то зачем даете нерабочий пример?

это Вы его дали :) вот тут

эта сообщение было ответом на Вашу цитату

Может тебе еще рассказать что такое число pi и чему оно равно ?

в доступной форме (надеюсь) было показано что такое число pi, и что будет если просто взять его и вывести

а Ваш пример некорректен чем?

а тем что он работае, вобщем-то :)

почему? да потому что в сигнатуре функций у стоят ссылки на потоки, а уж то что Вы их не выставили как следует - ССЗБ :)

int main(void) 
{
	std::cout << setprecision(20);
	ostringstream oss;
	oss << setprecision(20) << m_pi;
	istringstream iss (oss.str()); 

	X x; 
	x.read(iss); 
	x.write(cout); 
	std::cout << std::endl;

	return 0; 
} 

output: 3.1415926535897931

и не говорите что используя printf нельзя точно такую же умную вещь сделать

shty ★★★★★
()
Ответ на: комментарий от shty

да, верхняя часть кода

#include <iostream> 
#include <cmath>

using namespace std;

const double m_pi = 2*acos(0.0);

struct X 
{ 
   double m; 
   void read(istream & is) 
   { 
	   is >> m; 
   } 
   void write(ostream & os) 
   { 
       os << m; 
   } 
};

как видите, вот он Ваш код, и работает :)

ещё раз: type safe != idiot safe :)

shty ★★★★★
()
Ответ на: комментарий от shty

и да - это bad design, но это не значит что если такое встретится намертво вшитое в legacy нельзя будет написать человеческую обёртку

shty ★★★★★
()
Ответ на: комментарий от Reset

не работает, потому что корректно сохранить состояние класса он не может

1) работает потому что выдаёт правильный результат

2) шо? какое состояние класса? никому он ничего не должен сохранять или Вы опять считаете что язык за Вас должен что-то дописывать? к тому же может вся фишка в том что точностью можно управлять снаружи относительно методов данной структуры... я не знаю о чём Вы там мечтали когда пример такой писали :)

shty ★★★★★
()
Ответ на: комментарий от Reset

те же самые ошибки, что и сделал JackyTreehorn, откуда же вас - неучей столько повылазило ?

пыщщщщь... вода полилась :) засчитано, камрад

shty ★★★★★
()
Ответ на: комментарий от shty

> 1) работает потому что выдаёт правильный результат

Выдает правильный результат неправильным способом. Если делаете сериализацию в текстовый поток, то делате её нормально, чтобы вывод не зависел от внешних факторов.

2) шо? какое состояние класса?

Для тех кто в танке — set::precission надо вызывать внутри функции write, а потом вернуть поток в первоначальное состояние, чтобы после вызова write сюрпризов не было.

PS. ох, жалко же мне ваших студентов, чую плохому бедных учите

Reset ★★★★★
()
Ответ на: комментарий от Reset

> 2) шо? какое состояние класса?

Для тех кто в танке — set::precission надо вызывать внутри функции write, а потом вернуть поток в первоначальное состояние, чтобы после вызова write сюрпризов не было.

ещё раз, если у Вас таких структур летает целая куча и Вам надо (!!!) управлять форматом вывода централизовано из какого-нибудь управляющего класса, то почему бы и нет?

ещё раз, это зависит от того какую цель Вы преследовали во время написания такого куска кода :)

этот код, является корректным и при правильном подходе выдаёт правильный результат, но пользоваться им надо осторожно, как в общем и любыми, на первый взгляд безобидными, вещами в сравнительно низкоуровневом языке, которым является С++

если же Вы имели в виду другое - то ССЗБ

не забываем (type safe) != (idiot safe) :)

shty ★★★★★
()
Ответ на: комментарий от Reset

Нет, мы тебе пытаемся объяснить, что ты упертый идиот. Неужели не понять такую простую вещь? ;)

JackyTreehorn
()
Ответ на: комментарий от Reset

Это Вы так пытаетесь оправдать свою безграмотность?

отнюдь, пытаюсь показать Вам почему Ваш пример некорректен с точки зрения того что Вы хотите показать, а Вы отпираетесь как номенклатурщик со стажем :)

shty ★★★★★
()
Ответ на: комментарий от shty

вообще тошнит уже от этой темы, надо завершать

shty ★★★★★
()
Ответ на: комментарий от JackyTreehorn

> cout << msgs.get (cat, 1, CODE1, def) << i << msgs.get (cat, 1, CODE2, def) << n;

Просто пипец читабельность. Представляю, сколько говна на вас выльют переводчики ресурсов.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

> cout << msgs.get (cat, 1, CODE1, def) << i << msgs.get (cat, 1, CODE2, def) << n;

Просто пипец читабельность. Представляю, сколько говна на вас выльют переводчики ресурсов.

у Вас в конторе переводчики лазят в код?

shty ★★★★★
()
Ответ на: комментарий от shty

А это ничего, что переводчики в программе перевода вместо фразы будут видеть какие-то несвязные клочки текста ?

Reset ★★★★★
()
Ответ на: комментарий от Reset

А это ничего, что переводчики в программе перевода вместо фразы будут видеть какие-то несвязные клочки текста ?

да не будут они их видеть, с чего Вы это взяли?

shty ★★★★★
()
Ответ на: комментарий от shty

Это почему это? клочок текста один — msgs.get (cat, 1, CODE1, def). клочок текста два — msgs.get (cat, 1, CODE2, def). а связи между ними не будет. Такое корректно перевести вообще невозможно.

Reset ★★★★★
()
Ответ на: комментарий от shty

> у Вас в конторе переводчики лазят в код?

Переводчики лезут в ресурсы. И если в ресурсах одна фраза будет поделена на куски, то переводчики передадут вам пламенный привет.

andreyu ★★★★★
()
Ответ на: комментарий от Reset

Это почему это? клочок текста один — msgs.get (cat, 1, CODE1, def). клочок текста два — msgs.get (cat, 1, CODE2, def). а связи между ними не будет. Такое корректно перевести вообще невозможно.

а Вы им будете давать типы аргументов вписывать, да?

или таки локализованная строка таки будет выглядеть «## of ## files loaded» и потом (для printf) по ней пройдёт автопарсер и по заданным правилам приведёт строку к «%d of %d files loaded» и положит её в ресурсы?

shty ★★★★★
()
Ответ на: комментарий от shty

> > Переводчики лезут в ресурсы

а это не есть гуд


Это еще почему? Или мы под ресурсами понимаем разные вещи?

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

> > Переводчики лезут в ресурсы

а это не есть гуд

Это еще почему? Или мы под ресурсами понимаем разные вещи?

ресурсы должны собираться автоматически, вот как у Qt translator (или как там его) сделано, иначе если у тебя вдруг внутренний формат поменяется (а такое бывает) или ещё что то твои переводчики (или кого ты там посадишь) будут работать ишаками перебивая ручками циферки

shty ★★★★★
()
Ответ на: комментарий от Reset

А ничего, что при твоем подходе будут две строки - " of " и " files loaded" ? И как это переводить?

«ты не понял, любитель братьев наших меньших» (c)

какая разница что там будет потом, переводчик видит и работает со строками целиком, а уж как потом они транслируются и хранится - никого не волнует

shty ★★★★★
()
Ответ на: комментарий от Reset

А где тут противоречие с тем, что в ресурсы для перевода придется таки лезть qt linguist'ом ?

перечитай то о чём говорилось и подумай

shty ★★★★★
()
Ответ на: комментарий от shty

> какая разница что там будет потом, переводчик видит и работает со строками целиком, а уж как потом они транслируются и хранится - никого не волнует

Это как это? То есть код генерится по ресурсам, а не наоборот? Тогда веселая жизнь обеспечена программистам.

Reset ★★★★★
()
Ответ на: комментарий от Reset

> какая разница что там будет потом, переводчик видит и работает со строками целиком, а уж как потом они транслируются и хранится - никого не волнует

Это как это? То есть код генерится по ресурсам, а не наоборот? Тогда веселая жизнь обеспечена программистам.

ну зачем Вы глупости говорите, Вы же умный человек :)

код пишут программисты, но чтобы не учить переводчиков в каком внутреннем формате это всё хранится и не переучивать если он внезапно поменялся делается небольшая тулза для них, которая человечий вид переводит во внутренний формат хранения, а там уже пофиг чем и как выводить

эх, не общались Вы с гейм-дизайнерами по рабочим вопросам :)

shty ★★★★★
()
Ответ на: комментарий от shty

Возьмем например qt. Я делаю так tr(«%1 of %2 files loaded»), потом натравливаю lupdate, который генерит ts файл. ts файл открывается в лингвисте переводчиками, которые увидят там полную фразу «%1 of %2 files loaded». В случае с gettext механизм аналогичен.

А как быть вот с этим cout << msgs.get (cat, 1, CODE1, def) << i << msgs.get (cat, 1, CODE2, def) << n; ? Опишите механизм полностью. Мне не понятно каким образом в ресурсах возникнет полная фраза, а не ёё куски.

Reset ★★★★★
()
Ответ на: комментарий от Reset

Что ты уцепился за этот кусок? Меня попросили «перевести» дословно. В продакшне я бы тоже не стал такое писать.
У меня ваще опыта локализации нет, если честно, я специализируюсь по легаси.

JackyTreehorn
()
Ответ на: комментарий от JackyTreehorn

> я специализируюсь по легаси.

Это что-то типа уборщика сортиров, но в мире программирования ? :)

Reset ★★★★★
()
Ответ на: комментарий от shty

> ресурсы должны собираться автоматически, вот как у Qt translator (или как там его) сделано, иначе если у тебя вдруг внутренний формат поменяется (а такое бывает) или ещё что то твои переводчики (или кого ты там посадишь) будут работать ишаками перебивая ручками циферки

Значит мы все же говорим о разных ресурсах. Какая разница переводчикам, какой там внутренний формат? Они работают со строками. С целыми строками. В моем случае это строки диалогов персонажей, объединенных в группы.
Так что не нужно мне рассказывать про некий геймдейв. Вы ведь преподаватель, а не геймдевелопер.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Может, к нему бывшие студенты-геймдевы приходят и рассказывают ;)

JackyTreehorn
()
Ответ на: комментарий от Reset

А как быть вот с этим cout << msgs.get (cat, 1, CODE1, def) << i << msgs.get (cat, 1, CODE2, def) << n; ? Опишите механизм полностью. Мне не понятно каким образом в ресурсах возникнет полная фраза, а не ёё куски.

прости дорогой, но твоя проблема в том что ты не понимаешь концепции потоков, это не плохо, это просто вот так сложилось :)

вот сейчас ты путаешь вывод и хранение, к примеру :)

следует относиться относится к приёмнику потока как к буферу, а не устройству вывода

что мешает сделать вот так?

UnicodeString result;
    result = MessageFormat::format(
       "At {1,time} on {1,date}, there was {2} on planet{0,number,integer}.",
       arguments,
       3,
       result,
       err);

а внутри использовать твою «любимую» ;) фразу:

result << msgs.get (cat, 1, CODE1, def) << i << msgs.get (cat, 1, CODE2, def);

что мешает тебе использовать класс для хранения строки целиком и по запросу извлекать из словаря все составляющие?

тебе лучше и дальше использовать концепцию форматирования строк в стиле printf и не забивать себе голову :)

shty ★★★★★
()
Ответ на: комментарий от Reset

> я специализируюсь по легаси.

Это что-то типа уборщика сортиров, но в мире программирования ? :)

что это, снобизм? ах да, принцессы-ж не какают :)

shty ★★★★★
()
Ответ на: комментарий от andreyu

Значит мы все же говорим о разных ресурсах. Какая разница переводчикам, какой там внутренний формат? Они работают со строками. С целыми строками. В моем случае это строки диалогов персонажей, объединенных в группы.

но таки переводчики не лазают руками в ресурсы, а используют соответствующую тулзу, или нет?

Так что не нужно мне рассказывать про некий геймдейв. Вы ведь преподаватель, а не геймдевелопер.

не, ну Вам то виднее :)

shty ★★★★★
()
Ответ на: комментарий от shty

То есть ты предлагаешь вот это «At {1,time} on {1,date}, there was {2} on planet{0,number,integer}» распарсить, а потом назад «запарсить» с помощью «стрелочек» лишь бы было «на потоках» ?

Reset ★★★★★
()
Ответ на: комментарий от Reset

То есть ты предлагаешь вот это «At {1,time} on {1,date}, there was {2} on planet{0,number,integer}» распарсить, а потом назад «запарсить»

а что не так? в чём проблема? почему в случае с boost::format это Вас не смущает? :)

с помощью «стрелочек» лишь бы было «на потоках» ?

потоки не самоцель - а удобный инструмент

как я уже сказал Вы не понимаете концепции потоков, то что вы используете термины типа «стрелочки» свидетельствует о Вашем пренебрежительном отношении и нежелании разбираться, но в конце концов - это Ваше право так думать :)

и да, я здесь не для того чтобы Вас переубеждать - используйте что нравится :)

shty ★★★★★
()
Ответ на: комментарий от shty

> а что не так? в чём проблема?

Ты хоть понял, что ты предложил заменить printf на (театральная пауза, барабанная дробь) printf? )))

LamerOk ★★★★★
()
Ответ на: комментарий от LamerOk

Ты хоть понял, что ты предложил заменить printf на (театральная пауза, барабанная дробь) printf? )))

ты и правда не понимаешь в чём разница?

shty ★★★★★
()
Ответ на: комментарий от shty

> ты и правда не понимаешь в чём разница?

Прекрасно понимаю. Чтобы вывести строку текста нужно будет выполнить много дурной работы.

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

Причем ошибки будут вылетать ощутимо ниже по стеку вызовов от места появления.

Это замена одной проблемый другой проблемой, при том, что конечный интерфейс стал более громоздким. По-русски это называется bloatware. ))

LamerOk ★★★★★
()
Ответ на: комментарий от LamerOk

при неправильном количестве/типе* параметров.

LamerOk ★★★★★
()
Ответ на: комментарий от shty

> но таки переводчики не лазают руками в ресурсы, а используют соответствующую тулзу, или нет?

Как я и предположил, у нас разные понятия ресурсов. И разные понятия о лазании руками / использовании соответствующих тулз.
Кстати, а текстовый редактор не может являться соответствующей тулзой? Или это обязательно должна быть самописная софтина, ради поддержания хитровыгнутого внутреннего формата?

andreyu ★★★★★
()
Ответ на: комментарий от shty

то что вы используете термины типа «стрелочки» свидетельствует о Вашем пренебрежительном отношении и нежелании разбираться

стрелочки. и почему-то никто не считает, что такое название о чём-то свидетельствует

jtootf ★★★★★
()
Ответ на: комментарий от andreyu

Вы ведь преподаватель

бедные дети!

jtootf ★★★★★
()
Ответ на: комментарий от LamerOk

> ты и правда не понимаешь в чём разница?

Прекрасно понимаю. Чтобы вывести строку текста нужно будет выполнить много дурной работы.

локализация в любом разе это предполагает

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

нет, не понимаешь - иди медитируй

Причем ошибки будут вылетать ощутимо ниже по стеку вызовов от места появления.

точно? уверен?

Это замена одной проблемый другой проблемой, при том, что конечный интерфейс стал более громоздким.

это замена неотлавливаемой ошибки на отлавливаемую, если для Вас это так сложно понять то я Вам сочувствую

shty ★★★★★
()
Ответ на: комментарий от andreyu

Кстати, а текстовый редактор не может являться соответствующей тулзой?

только не для копания в ресурсах

Или это обязательно должна быть самописная софтина, ради поддержания хитровыгнутого внутреннего формата?

смотрите какой пузатый толстячок пришёл к нам на огонёк

Вы, видимо, никогда не сталкивались с ситуацией, к примеру, что фриз ресурсов не проходит из-за каких то вот мелких помарок, не?

А знает сколько переводчик делают ошибок на 1 Мб текста? А если в тексте стоят маркеры для полей данных?

shty ★★★★★
()
Ответ на: комментарий от jtootf

уважаемый, ты такой же «гирный» как и твой пингвин

и если ты не отличаешь стрелочку "->", от оператора сдвига влево (left shift operator) «operator<<», то это не значит что все такие же неучи

shty ★★★★★
()
Ответ на: комментарий от shty

это не значит что все такие же неучи

чучело, ты по ссылке-то хоть сходил? не надоело позориться?

jtootf ★★★★★
()
Ответ на: комментарий от shty

> нет, не понимаешь - иди медитируй

Над чем медитировать? Кода реализации-то нет. )))

Причем ошибки будут вылетать ощутимо ниже по стеку вызовов от места появления.


точно? уверен?


Ну, чувак, если ты сумеешь отловить ошибки в описанном тобою интерфейсе _ДО_ или хотя бы во время обращения к MessageFormat::format, я поставлю тебе памятник. Нерукотворный.

это замена неотлавливаемой ошибки на отлавливаемую,


Деточка, arguments в

MessageFormat::format(«At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.»,arguments, 3,result, err);


у тебя что? Он из астрала приходит в наш мир или формируется телепатически?
Выйди к доске и расскажи всему классу, что прозойдет, когда вместо 3 аргументов будет передан один. Или ноль.

Заодно расскажи, какое магическое значение несет в себе цифра 3, и за каким ражном ты её впендюрил в список параметров. )))

LamerOk ★★★★★
()
Ответ на: комментарий от shty

> > Кстати, а текстовый редактор не может являться соответствующей тулзой?

только не для копания в ресурсах


Понял, вы просто невменяемый.

> Или это обязательно должна быть самописная софтина, ради поддержания хитровыгнутого внутреннего формата?

смотрите какой пузатый толстячок пришёл к нам на огонёк



При чем тут толстячок? Я следовал вашей логике - формат ресурсов должен быть максимально сложным; так же должна быть утилита, для редактирования ресурсов в этом формате.

Вы часом не приложили руку к разработке формата офисных документов компании MS?

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

При чем тут толстячок?

позволю себе повториться:

http://coderoom.wordpress.com/2010/03/19/5-stages-of-programmer-incompetence/

Having programmed for a few years and learnt a second language, the budding genius is firmly convinced that he is the Messiah of the programming world. He reinforces this world view with his conviction that anything he doesn’t understand (i.e. almost everything) is pointless, old-fashioned and a waste of time.

в курабельности лично я сомневаюсь

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

ты сам то ходил, умник?

я не даю ссылок на вещи, в которых не разбираюсь

и теперь контрольный: о чём мы рассказали и к чему Вы привели ссылку?

shty ★★★★★
()
Ответ на: комментарий от LamerOk

Ну, чувак, если ты сумеешь отловить ошибки в описанном тобою интерфейсе _ДО_ или хотя бы во время обращения к MessageFormat::format, я поставлю тебе памятник. Нерукотворный.

поставь памятник своей глупости :)

Деточка, arguments в

> MessageFormat::format(«At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.»,arguments, 3,result, err);

у тебя что? Он из астрала приходит в наш мир или формируется телепатически? Выйди к доске и расскажи всему классу, что прозойдет, когда вместо 3 аргументов будет передан один. Или ноль.

а ты открой исходники ICU деточка и посмотри как нормальные квалифицированные люди обрабатывают ошибки :)

shty ★★★★★
()
Ответ на: комментарий от andreyu

Я следовал вашей логике - формат ресурсов должен быть максимально сложным;

ты следовал не моей логике, а тому что твой мозг смог осознать из того что я тебе говорил, но, ей-ей, осознал твой мозг немного

shty ★★★★★
()
Ответ на: комментарий от shty

> ты следовал не моей логике, а тому что твой мозг смог осознать из того что я тебе говорил, но, ей-ей, осознал твой мозг немного

Напомните, когда я пил с вами на брудершафт?

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

>должна быть утилита, для редактирования ресурсов в этом формате.

Ога, попробуй посади гуманитария переводить строковые ресурсы в редакторе Emacs или Vim. Легко угадать, куда ты будешь им послан.

anonymous
()
Ответ на: комментарий от anonymous

>должна быть утилита, для редактирования ресурсов в этом формате.

Ога, попробуй посади гуманитария переводить строковые ресурсы в редакторе Emacs или Vim. Легко угадать, куда ты будешь им послан.

это лёгкий вариант развития событий, потяжелее будет если он таки залезет и исправит так как ему кажется правильно и закоммитит, а потом фриз ресурсов не пройдёт и придётся делать много «monkey business» в сжатые сроки и в последний момент

shty ★★★★★
()
Ответ на: комментарий от andreyu

никогда, это у вас libastral.so (или то dll?) лагает

shty ★★★★★
()
Ответ на: комментарий от shty

>закоммитит, а потом фриз ресурсов не пройдёт и придётся делать много «monkey business» в сжатые сроки и в последний момент

В работе преподавателей и такое бывает? Вы как будто про свою практику рассказываете... Неужто Вы изволили наврать про преподавателя?

anonymous
()
Ответ на: комментарий от anonymous

>закоммитит, а потом фриз ресурсов не пройдёт и придётся делать много «monkey business» в сжатые сроки и в последний момент

В работе преподавателей и такое бывает? Вы как будто про свою практику рассказываете... Неужто Вы изволили наврать про преподавателя?

отвечу иносказательно: а разве на 1 процессоре нельзя добиться многозадачности? :)

shty ★★★★★
()
Ответ на: комментарий от shty

shty

как я уже сказал Вы не понимаете концепции потоков, то что вы используете термины типа «стрелочки» свидетельствует о Вашем пренебрежительном отношении и нежелании разбираться

jtootf

стрелочки. и почему-то никто не считает, что такое название о чём-то свидетельствует

что ещё тебе объяснить? название абстракции взято из теории категорий, одно из типичных приложений - stream processing, любимые тобою потоки

попробуй почитать хоть что-нибудь, что выходит за рамки твоего уютного мирка, ну

jtootf ★★★★★
()
Ответ на: комментарий от shty

> а ты открой исходники ICU деточка и посмотри как нормальные квалифицированные люди обрабатывают ошибки

Поздняк съезжать с темы. ))

Вопрос был - _ГДЕ_ будут обрабатываться эти ошибки. Ты, слил, родимый.
Памятника тебе не будет. ))

LamerOk ★★★★★
()
Ответ на: комментарий от LamerOk

> а ты открой исходники ICU деточка и посмотри как нормальные квалифицированные люди обрабатывают ошибки

Поздняк съезжать с темы. ))

Вопрос был - _ГДЕ_ будут обрабатываться эти ошибки. Ты, слил, родимый.

для вдумчивыхЪ: иди уже открой сорцы ICU и просветлись как там обрабатываются ошибки

Памятника тебе не будет. ))

и правильно, рано меня ещё хоронить

shty ★★★★★
()
Ответ на: комментарий от jtootf

жiрний пiнгвiнятко? какая нах теория категорий, есть operator<<, который называется lefy shift operator, какие ещё вопросы?

или ты из тех блондинок которые говорят «вот эта штучечка, эта закорючка и ещё вон та висюлька» объясняя суть научного эксперимента?

попробуй почитать хоть что-нибудь, что выходит за рамки твоего уютного мирка, ну

журнал гламур? нет уж увольте

shty ★★★★★
()
Ответ на: комментарий от shty

> просветлись как там обрабатываются ошибки

Ты всё никак не можешь понять разницу между «как» и «где»? Сочувствую. )))

LamerOk ★★★★★
()
Ответ на: комментарий от LamerOk

просветлись как и где там обрабатываются ошибки

//obvious fix

shty ★★★★★
()
Ответ на: комментарий от LamerOk

Охлол. Это пять!! В фортунки! ))))

это было бы смешно, если бы не было так грустно

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

жiрний пiнгвiнятко?

ты даже здесь умудрился допустить ошибку

для подчёркивания твоего жыра как раз :)

журнал гламур?

http://www.cs.chalmers.se/~rjmh/Papers/arrows.pdf

хотя тебе, пожалуй, журнал гламур будет полезней. больше понятных слов

по себе людей не судят, толстячок :)

чмонады свои можешь использовать ректально, я разрешаю, здесь же разговор идёт в контексте (знаешь такое слово? а понятие?) С++ и нет тут никаких стрелочек, а есть потоки и переопределённый оператор сдвига, очень жаль что твой моск не способен этого понять

shty ★★★★★
()
Ответ на: комментарий от Reset

boost::format тоже не осилили? или вопрос обсуждался выше? (лень читать все)

Я всё понимаю, но юзать printf в коде на С++ в 21-ом веке, это как то совсем...

archimag ★★★
()
Ответ на: комментарий от archimag

Я всё понимаю, но юзать printf в коде на С++ в 21-ом веке, это как то совсем...

А ты точно не из этих

std::string hexdump(void* x, unsigned long len, unsigned int w)
{
	std::ostringstream osDump;
	std::ostringstream osNums;
	std::ostringstream osChars;
	std::string szPrevNums;
	bool bRepeated = false;
	unsigned long i;
	 
	for(i = 0; i <= len; i++)
	{
		if(i < len)
		{
			char c = (char)*((char*)x + i);
			unsigned int n = (unsigned int)*((unsigned char*)x + i);
			osNums << std::setbase(16) << std::setw(2) << std::setfill('0') << n << " ";
			if(((i % w) != w - 1) && ((i % w) % 8 == 7))
			osNums << "- ";
			osChars << (iscntrl(c) ? '.' : c);
		}
 
		if(osNums.str().compare(szPrevNums) == 0)
		{
			bRepeated = true;
			osNums.str("");
			osChars.str("");
			if(i == len - 1)
			osDump << "*" << std::endl;
			continue;
		}
 
		if(((i % w) == w - 1) || ((i == len) && (osNums.str().size() > 0)))
		{
			if(bRepeated)
			{
				osDump << "*" << std::endl;
				bRepeated = false;
			}
		osDump << std::setbase(16) << std::setw(8) << std::setfill('0') << (i - (i % w)) << "  "
		<< std::setfill(' ') << std::setiosflags(std::ios_base::left)
		<< std::setw(3 * w + ((w / 8) - 1) * 2) << osNums.str()
		<< " |" << osChars.str() << std::resetiosflags(std::ios_base::left) << "|" << std::endl;
		szPrevNums = osNums.str();
		osNums.str("");
		osChars.str("");
		}
	}
 
osDump << std::setbase(16) << std::setw(8) << std::setfill('0') << (i-1) << std::endl;
 
return osDump.str();
}

?

LamerOk ★★★★★
()
Ответ на: комментарий от archimag

Легко нагуглить. В жж какого-то перца, который описывал себя как former c++ hacker, подавшийся в разработчики на дотнете. ))

LamerOk ★★★★★
()
Ответ на: комментарий от Eddy_Em

> Хороший пример, где на все 100% нужно пользоваться printf'ом :)

Есть две уважительный причины для использования printf в коде на С++: legacy и жёсткая оптимизация. А тут нужен boost::format, который удобней и безопасней, чем printf и совместим с потоками C++, что является черезвычайно важным.

archimag ★★★
()
Ответ на: комментарий от archimag

Честно говоря, когда-то я читал Страуструпа, думал, может быть, пригодится мне C++. Пока ни с одной ситуацией, где мне бы понадобились преимущества С++ над чистым С не сталкивался. Я не пишу GUI (для моих задач лучше всего подходит веб-интерфейс), мои программки не превышают по объему кода сотни-другой килобайт. В общем, С++ мне абсолютно бесполезен :)

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

> Пока ни с одной ситуацией, где мне бы понадобились преимущества

С++ над чистым С не сталкивался.


Ну если ты не владеешь C++ практически, то и не столкнёшься :) Я на С++ даже модули для Apache писал, ибо писать на чистом C без веских на то оснований - просто тратить напрасно своё время ;)

archimag ★★★
()
Ответ на: комментарий от archimag

Писать на С++ есть смысл лишь в случае, когда в задаче можно выделить классы, определить зависимость между ними, наследование и т.п. А когда у меня несколько железок, которыю надо периодически опрашивать и обрабатывать полученные данные, С++ использовать бесполезно. Ну, а примеры неоправданного применения С++ там, где можно было бы значительно уменьшить количество кода использованием С, здесь уже приводили.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

> Писать на С++ есть смысл лишь в случае, когда в задаче можно выделить

классы, определить зависимость между ними, наследование и т.п.


С чего вдруг? STL, например, может быть весьма эффективна даже если не определять своих классов. А boost.asio кажется сейчас лучшее что есть, для работы с асинхронным вводом/выводом. Ну и т.д. У C++ много преимуществ, но что бы понимать их нужно владеть им на достаточно хорошем уровне ;)

примеры неоправданного применения С++ там, где можно было бы

значительно уменьшить количество кода использованием С, здесь уже


приводили.



Вас ввели в заблуждение.

archimag ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.