2009-03-15 3 views
8

Я программист на C#, который начал использовать ubuntu около 2 лет назад. Я хочу научиться программированию на любом языке C или C++. Мне не нравится моно, он имеет тенденцию к сбою в моей системе. У меня есть базовое понимание C++. Я никогда не работал на C, но это выглядит круто. Какой инструментарий мне следует изучить/использовать? Дайте Pro/Cons каждому. Благодаря!Должен ли я изучать GTK + или GTKMM?

+0

OMG, пожалуйста, попробуйте Qt ... –

ответ

12

Поскольку C++ более знаком вам, вы можете найти GTKmm лучше, потому что вы можете использовать идиомы, такие как RAII. К сожалению, GTKmm немного неполна и не хватает некоторых из менее используемых частей GTK.

GTK + сам по себе, однако, предоставляет объектную модель, аналогичную той, что вы находите на C++, но только с C функциями. Такие вещи, как конструкция и уничтожение на C++, выполняются явно в API C, а экземпляры виджетов обрабатываются исключительно с помощью указателей.

Попробуйте оба и посмотрите, что лучше подходит вашему проекту.

2

Вы посмотрели на QT?
Это хороший C++ дизайн, кросс-платформенный и LGPL

+0

Да, мне это нравится, но я не знаю (если это имеет смысл). – Kredns

+7

Да, я знаю, что вы имеете в виду. Я имею в виду не очень – 2009-03-15 19:20:55

+0

@Iraimbilanja: Nice One! – Kredns

29

я мог быть обвинен в предвзятости, так как я помочь способствовать gtkmm, но я был пользователем первый, так что ... В любом случае, я очень рекомендую gtkmm, если вам нравится C++. Управление памятью намного проще с gtkmm, чем с GTK +, поскольку объекты с подсчетом ссылок управляются автоматически с помощью интеллектуальных указателей. Вы также можете создавать объекты как автоматические переменные (например, в стеке) и определять срок их жизни по их объему. Поэтому на практике гораздо проще избежать утечек памяти с помощью gtkmm, чем с GTK +.

Другое Огромное Преимущество gtkmm над GTK + (на мой взгляд) - использование структуры сигналов типа безопасных. В GTK + вам постоянно нужно передавать вещи как указатели void, а затем бросать их туда, где, по вашему мнению, они должны быть. В gtkmm вам не нужно это делать, и вы можете воспользоваться компилятором, обеспечивающим безопасность типов для ваших обработчиков сигналов.

Другим большим преимуществом перед C/GTK + является легкость получения новых классов. В GTK + вам нужно написать много кода шаблона и в основном повторно реализовать вещи, которые вы получаете бесплатно на C++, как часть языка (например, наследование, конструкторы, деструкторы и т. Д.). Это более утомительно и подвержено ошибкам.

greyfade отметил, что gtkmm является неполным, и он прав в определенной степени - gtkmm не охватывает абсолютно все в GTK + API (хотя он ужасно близок). Но на практике это не проблема, потому что вы всегда можете использовать API C/GTK + непосредственно из вашего кода gtkmm. Эта совместимость C является огромным преимуществом C++ над чем-то вроде привязок C# или python, где у вас не будет альтернатив, если привязка не распространяется на часть API.

Единственные реальные причины выбора GTK + over gtkmm (IMO) - это то, что gtkmm имеет немного дополнительных накладных расходов, поскольку это оболочка поверх библиотеки C (но это, как правило, только один вызов функции, который собирается имеют незначительное влияние), или если вы ненавидите или не можете использовать C++.

+0

+1 для этого !!!! –

16

Если вы программист на C#, почему бы вам не взглянуть на Vala?

Я использую pygtk для большинства моих приложений графического интерфейса Linux, но Python был слишком медленным для проекта, над которым я сейчас работаю, поэтому я пытался выбрать один из GTK + и GTKmm. Затем я встретил Валу.

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

2

Я думаю, что лучший путь будет первым узнать gtkmm! После того, как вы закончите работу с gtkmm, GTK + должен быть достаточно простым, чтобы учиться (при условии, что вы знаете C и удобны с указателями).

В случае, если вы не знаете C, вы можете узнать его быстро прочитав Язык программирования C Деннис Ритчи

Я рекомендую вам изучить gtkmm первых, потому что он разработан специально для C++, который несколько похож на C#, поскольку оба являются объектно-ориентированными, поэтому gtkmm будет относительно легко освоить сначала, чем GTK +.

После gtkmm, вы можете перейти на GTK +

Большинство открытого исходного кода компании использует GTK +, а не gtkmm, поэтому GTK + является целесообразно, чтобы узнать!

+0

Когда я погружаюсь, чтобы научить программированию GUI, «gtkmm» был первой библиотекой GUI, на которую я посмотрел, где я не сразу отшатнулся в ужасном ужасе (включая GTK +). Тот факт, что я учил себя C++ 11 в то время, и «gtkmm» прилагает совместные усилия по использованию современной языковой версии (опять же, в отличие от GTK +), много добавила к апелляции. И, как вы сказали, однажды, когда я использовал 'gtkmm', чтобы понять, как работают модели графического интерфейса пользователя, и из-за необходимости сообщать о нескольких небольших ошибках в GTK + ;-), последний сделал бесконечно больше смысла, когда я снова посмотрел на него. Теперь я почти ценю это! ;-) –

3

Как многие говорили, Gtkmm действительно предоставляет вам хорошее управление памятью, ссылки на подсчитанные объекты и т. Д. Однако он падает в одном отделе. Документация. Весь проект Gtkmm страдает от явлений «недокументации», когда размещенная (и отправленная на сторонних сайтах) документация представляет собой просто просмотр javadoc файлов заголовков.

Просто хотел, чтобы вы знали, во что вы попадете. Например, Scrolled Window является одним из лучших документированных классов в Gtkmm.

+0

Чтобы быть точным, документы в библиотеках 'mm' (' gtkmm', 'glibmm') записываются в заголовки, но то, что написано там, обычно генерируется путем преобразования документов из C-функций в GTK +/GLib/др. '.c' в точке обертывания (построения). Однако это можно переопределить и написать собственные документы, например, если в документах C содержится много C-isms, которые не хорошо конвертируются. Конечно, если вы видите что-либо, что отсутствует или плохо преобразуется, то патчи к заголовкам 'mm' или подпрограмме, которые преобразуются из документации C, будут приветствоваться в Bugzilla или в списке рассылки –

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