Здравствуйте, Аноним, Вы писали:
А>После Java увлекся С++. Посоветуйте OpenSource проект для анализа и изучения.
Я б покопался в Nunit или чем-то подобном. Из буста — только отдельные темы для начала.
Например, интеллектуальные указатели.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Аноним, Вы писали:
А>После Java увлекся С++. Посоветуйте OpenSource проект для анализа и изучения.
Я бы посоветовал изучать первым делом контейнерные библиотеки, т.к. они ближе к "структурам данных", что необходимо знать в первую очередь. Зная структуры данных можно переходить на алгоритмы.
Поиском таких библиотек можно начать с sourceforge.net. Здесь одна, которая несколько отличается от STL подобных контейнеров.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[3]: Увлекся С++. Посоветуйте OpenSource
От:
Аноним
Дата:
05.06.08 11:45
Оценка:
Здравствуйте, Аноним, Вы писали:
J>>www.boost.org А>Нельзя же так жестоко людей пугать!
Ну буст одним объёмом может напугать. А я могу предложить всего кил 250 сорцов в единственном файле.
Re: Увлекся С++. Посоветуйте OpenSource
От:
Аноним
Дата:
05.06.08 12:29
Оценка:
Здравствуйте, Аноним, Вы писали:
А>После Java увлекся С++. Посоветуйте OpenSource проект для анализа и изучения.
Здравствуйте, Аноним, Вы писали:
А>>После Java увлекся С++. Посоветуйте OpenSource проект для анализа и изучения.
А>QT. Там хоть и препроцессор, но отличная вещь.
Архитектурно — гадость! Нарушения LSP на каждом шагу, запутанная политика владения, для любого расширения функциональности нужно делать subclassing и т. д.
Ее потому используют, что она много чего умеет, хоть и криво. Тот же Boost пытается делать всё идеологически правильно, но из этих двух библиотек одна умеет рисовать кнопочки, парсить XML и разговаривать с БД, а другая нет.
Здравствуйте, Roman Odaisky, Вы писали:
RO>Архитектурно — гадость! Нарушения LSP на каждом шагу, запутанная политика владения, для любого расширения функциональности нужно делать subclassing и т. д.
RO>Ее потому используют, что она много чего умеет, хоть и криво. Тот же Boost пытается делать всё идеологически правильно, но из этих двух библиотек одна умеет рисовать кнопочки, парсить XML и разговаривать с БД, а другая нет.
Да, чем ближе код к реальной жизни, тем меньше у него шансов быть правильным. Реальность слишком зыбка и непрозрачна.
There are a couple of dozen guys in Bruce Lee’s pirate band, and they are now lined up along the trawler's railing, grinning, whistling, howling like wolves, and waving unrolled trojans in the air.
“Don’t worry, man, I’m not going to let ’em fuck you,” Fisheye says, grinning.
“What you gonna do,” Eliot says, “hand them a papal encyclical?”
“I’m sure they’ll listen to reason,” Fisheye says.
Здравствуйте, Vain, Вы писали:
V>Здесь одна, которая несколько отличается от STL подобных контейнеров.
Заинтересовался, посмотрел. В хреновую сторону она отличается. Похоже, они решили сделать все ошибки, которые были накоплены за всю историю фреймворкострокения.
>int i = string.Integer();
Это должно быть отдельной функцией! std::complex<double> z = string.??? MyBigInt bigint = string.??? То ли дело boost::lexical_cast.
> /* Seek to the end of the file, the first parameter specifies the position and the second parameter specifies the origin. Origins are start < 0, current == 0, finish > 0 */ > file.Seek(0,1);
enum уже отменили?
// Open a folder and list its contents
Folder folder("/home");
folder.List();
// Now we can iterate through the files or foldersfor (folder.Files.MoveFirst(); folder.Files.Has(); folder.Files.MoveNext())
{
/* The name is a pointer to a Path component, File and Folder both inherit from Path */
String name = *folder.Files().Name
name.Uppercase();
folder.Files().Name->Replace(name);
folder.Files().Construct();
folder.Files().Create();
}
Здесь полдесятка граблей, не меньше.
// Create a set of pointers, and then destroy them
Set<Object*> set;
set.Insert(new String("five"));
set.Insert(new Number(5));
Number * number = new Number(5);
if (!set.Insert(number)
{
delete number;
}
// No memory leaks here...
set.Destroy();
А это к вопросу о GC... rofl.
Map<Object *,String> map(Comparable::COMPARE_GENERAL);
map.Insert(new Number(10),"z");
map.Insert(new Number(5),"a");
Number number(5);
map.Insert(&number,"b");
/* because the insertion above will fail, we can safely destroy all of the keys. All maps let you destroy either the keys or the values or both */
map.DestroyKeys();
Так и представляю себе map без ключей, но со значениями.
MySql mysql;
SqlRecordset recordset;
SqlDatabase database(&mysql);
database.Open("test", "user", "pass", "localhost" ,3306);
database.Execute(recordset,"select * from test");
Почему mysql по указателю, а recordset по ссылке?
int count = recordset.Count;
if (recordset.Fields[0].Is("name"))
{
String string = recordset(0,0);
}
Без комментариев... Такое еще не страшно увидеть в C#, где есть сахар в виде void f(this SomeClass parameter). Но в C++?..
> char * host = SocketLibrary::ResolveHostname();
char*?!
> unsigned long addr = SocketLibrary::ResolveAddress();
А как же IPv6?
Time future;
future += 10; // 10 seconds from nowdo
{
if(listener.Accept(connection->Socket,connection->Address))
{
connections.Append(connection);
connection = new Connection(Socket::SOCKET_MODE_ASYNCHRONOUS);
}
for(int i=0;i<connections.Length();++i)
{
String string;
string.Allocate(1024);
int read = connections[i]->Socket.Read(string.Data,string.Allocated);
if (read == 0 && !connections[i]->Socket.IsReadable())
connections.DeleteAt(i);
else
string.Size = read;
}
// Wait 100 milliseconds between accepting connections
Thread::Sleep(100);
}
while(Time() < future);
Вот это подход! И зачем разработчики ОС мучаются с epoll, kqueue, IOCP... Нечего думать — трясти надо!
Now Hiro sees a nameplate tacked onto the control panel.
REASON
version 1.0B7
Gatling type 3mm hypervelocity railgun system
Ng Security Industries, Inc.
PRERELEASE VERSION—NOT FOR FIELD USE
DO NOT TEST IN A POPULATED AREA
— ULTIMA RATIO REGUM —
“See, I told you they’d listen to Reason,” Fisheye says, shutting down the whirling gun.
ИМХО, начинать стоит c HP STL — то, что легло в основу стандартной библиотеки и теперь является частью языка. Без ужасов с препроцессором, как в потомках...
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, Roman Odaisky, Вы писали:
V>>Здесь одна, которая несколько отличается от STL подобных контейнеров. RO>Заинтересовался, посмотрел. В хреновую сторону она отличается. Похоже, они решили сделать все ошибки, которые были накоплены за всю историю фреймворкострокения.
Я реализации не смотрел, мне больше интерфейсы понравились и названия, типа String/Substring..
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
RO>Заинтересовался, посмотрел. В хреновую сторону она отличается. Похоже, они решили сделать все ошибки, которые были накоплены за всю историю фреймворкострокения.
наверное все это исправлено в платной комерческой версии
RO>Архитектурно — гадость! Нарушения LSP на каждом шагу, запутанная политика владения, для любого расширения функциональности нужно делать subclassing и т. д. RO>Ее потому используют, что она много чего умеет, хоть и криво. Тот же Boost пытается делать всё идеологически правильно, но из этих двух библиотек одна умеет рисовать кнопочки, парсить XML и разговаривать с БД, а другая нет.
Нельзя ли чуть подробнее, что она криво делает из того, что умеет и почему все так плохо? Мне лично Qt очень нравится и кажется удобным и простым в использовании, и ДО ЛАМПЫ совершенно красоты и правильности дизайна QT или их отсутствие.
Of course, the code must be complete enough to compile and link.
Нельзя ли чуть подробнее, что она криво делает из того, что умеет и почему все так плохо? Мне лично Qt очень нравится и кажется удобным и простым в использовании, и ДО ЛАМПЫ совершенно красоты и правильности дизайна QT или их отсутствие.
Например, позднее связывание объектов. Да еще препроцессором. Получается нечитаемый код, в котором object.method() может быть слинковано с любой функцией любого класса, и из кода мы это узнаем только после внимательного изучения. Отлаживать такие программы, опять же, не подарок.
Здравствуйте, Roman Odaisky, Вы писали:
А>>> После Java увлекся С++. Посоветуйте OpenSource проект для анализа и изучения. А>> QT. Там хоть и препроцессор, но отличная вещь. RO> Тот же Boost пытается делать всё идеологически правильно, но из этих двух библиотек одна умеет рисовать кнопочки, парсить XML и разговаривать с БД, а другая нет.
Кстати, в Qt мне понравилась работа со слотами. Есть ли подобные вещи в других библиотеках?
Здравствуйте, artem_korneev, Вы писали:
_>Здравствуйте, Roman Odaisky, Вы писали:
А>>>> После Java увлекся С++. Посоветуйте OpenSource проект для анализа и изучения. А>>> QT. Там хоть и препроцессор, но отличная вещь. RO>> Тот же Boost пытается делать всё идеологически правильно, но из этих двух библиотек одна умеет рисовать кнопочки, парсить XML и разговаривать с БД, а другая нет.
_>Кстати, в Qt мне понравилась работа со слотами. Есть ли подобные вещи в других библиотеках?
невнятная реализация. boost::function хотя-бы complie-time, плюс не требует дополнительных наследований, включения макросов
Здравствуйте, Lorenzo_LAMAS, Вы писали:
RO>>Архитектурно — гадость! Нарушения LSP на каждом шагу, запутанная политика владения, для любого расширения функциональности нужно делать subclassing и т. д. RO>>Ее потому используют, что она много чего умеет, хоть и криво. Тот же Boost пытается делать всё идеологически правильно, но из этих двух библиотек одна умеет рисовать кнопочки, парсить XML и разговаривать с БД, а другая нет.
L_L>Нельзя ли чуть подробнее, что она криво делает из того, что умеет и почему все так плохо? Мне лично Qt очень нравится и кажется удобным и простым в использовании, и ДО ЛАМПЫ совершенно красоты и правильности дизайна QT или их отсутствие.
Здравствуйте, Константин Л., Вы писали:
L_L>>Нельзя ли чуть подробнее, что она криво делает из того, что умеет и почему все так плохо? Мне лично Qt очень нравится и кажется удобным и простым в использовании, и ДО ЛАМПЫ совершенно красоты и правильности дизайна QT или их отсутствие. КЛ>оч часто заставляет наследоваться
И?
Здравствуйте, Cyberax, Вы писали:
L_L>>>Нельзя ли чуть подробнее, что она криво делает из того, что умеет и почему все так плохо? Мне лично Qt очень нравится и кажется удобным и простым в использовании, и ДО ЛАМПЫ совершенно красоты и правильности дизайна QT или их отсутствие. КЛ>>оч часто заставляет наследоваться C>И?
И то, что я хочу модель, которая берет из БД только часть записей. Сделал SqlRelationalTableModelWithLimit: public QSqlRelationalTableModel, в которой определил setLimit(int, int = 0). Замечательно.
А теперь внимание, вопрос: как приделать setLimit к QSqlTableModel и QSqlQueryModel? Их тоже придется сабклассить, таким образом, одно и то же повторяется 3 раза!
Теперь LSP. Всем известный пример с квадратом и прямоугольником. Кто из них чей потомок? Никто ничей. Почему же QLayout::spacing() возвращает не то, что было задано с помощью QLayout::setSpacing, а -1, если динамический тип его — QGridLayout? А бедному юзеру каждый раз проверять.
Сигналы/слоты. На каждый из них нужно заводить функцию-член. Очень неудобно. QSignalMapper немного помогает, но всё равно неудобно.
Политика владения. Она каждый раз разная. Одной функции нужен указатель, полученный new, она ему сама сделает delete. В другом месте нужно передать указатель, а потом самому его забрать (например, функции QLayout::take*) и удалить.