interfaces/iinfo.h поменял @ все личкрафты перекомпилял.
Это недостаток, конечно же, да. А вот были бы в плюсах модули...
interfaces/iinfo.h поменял @ все личкрафты перекомпилял.
Это недостаток, конечно же, да. А вот были бы в плюсах модули...
Вообще, на самом деле, так как moc не может в шаблоннутые классы с макро Q_OBJECT, приходится применять следующий паттерн.
Определяется класс типа class ObjectBase : public QObject { Q_OBJECT ... };, в котором определяются все нужные сигналы и слоты, а затем определяется не-Q_OBJECT-шаблонный класс Object как-то ... more →
Я, кажется, совсем ебанулся с темплейтами и пихаю полиморфизм времени компиляции по параметрам запроса в структуру, инстанциируемую нужным элементом енама. А так как QObject не может в темплейты, то получается класс-аггрегатор.
Типичный кутимокод — класс, который делает много чего совсем несвязанного. Наружу выставлены функции, вроде как дергающие что нужно, но на деле они просто дергают одну Большую Мастер-Функцию, которая внутри через огромный switch все и делает.
Пиздец.
То, что Qt так активно использует препроцессор — полный отстой. Например, похоже, нельзя написать вариадик типа void Call (const char *name, Args... args);, который бы разворачивался в вызов QMetaObject::invokeMethod (name, Q_ARG (T1, arg1), Q_ARG (T2, arg2), ...), где Q_ARG — макрос, принимающий тип и переменную ... more →
Иногда легче сделать ручное управление памятью, нежели обмазываться-перемазываться shared/weak_ptr'ами. Логика не та.
Реквестирую умный греп: нужно найти по проекту все структуры в анонимных неймспейсах.
Джва часа проебался с непонятно как портящимся стеком и вообще полной пиздой от boost::optional, а оказалось, что программа линкуется с Boost 1.47, а optional юзает из 1.46.
Ебаный симейк.
Uniform initialization syntax тоже неговно, хоть с ним код еще понятнее и поддерживаемее:
emit userStatusChanged ({-1, 0, statusId, email, QString (), title, desc, features, ua});
Впрочем, в одном Анализер был прав. Теперь и я вместо return Group_.isEmpty () ? QStringList () : QStringList (Group_); пишу
QStringList result;
if (!Group_.isEmpty ())
result << Group_;
return result;
Написал свой первый в жизни вариадик. Кончил.
Нужно сериализовать в особый формат наборы из всяких разных чисел и строк. Можно делать везде конкатенацию, типа, result = ToMRIM (num1) + ToMRIM (num2) + ToMRIM (shit) + ..., но это как-то криво. А с вариадиками все очень просто и охуенно:
QByteArray ToMRIM (const ... more →
Вот и пригодились вложенные лямбды:
auto idHasName = [&info] (const QString& name)
{ return std::find_if (info.Identities_.begin (), info.Identities_.end (), [&name] (decltype (*info.Identities_.begin ()) id) { return id.name () == name; }) != info.Identities_.end (); };
Эта маленькая локальная функция ищет среди ... more →
В общем, на предыдущий пост все равно никто не прореагировал, так что пишу разгадку: http://jabapls.ws/cpp-implicit-return-mo...
Недавние проблемы с implicit move ctor заставили меня чуток поковыряться в теме, и, в общем, в очередной раз было выяснено, что C++0x — ебаное непродуманное говно.
Рассмотрим две программы: http://paste.pocoo.org/show/525322/ и http://paste.pocoo.org/show/525323/ . Отличаются тремя строками кода, не имеющими ... more →
Почитал камменты на cpp-next. Абрахамс какой-то улыбчивый, мягкий и неконфликтный дохуя, аж не вяжется с образом матерого плюсоеба.
Лямбды без вывода типов правда говно:
std::for_each (data→contactList.begin (), data→contactList.end (), [&allContacts] (const std::pair<std::string, MSN::Buddy*>& pair) { allContacts [pair.first] = pair.second→lists & (MSN::LST_AB | MSN::LST_AL | MSN::LST_BL); });
Ну и как там std::pair вывести бы самим?
А теперь вообще можно не писать обычных free-функций. http://paste.pocoo.org/show/523844/
gcc 4.5 и 4.6 ведут себя по-разному со статическими функциями в лямбдах. Например, для статической функции tr() такой код gcc 4.5 прохавает, а 4.6 уже нет, ругаться будет на незахваченный this:
[] () { tr ("test"); }
Впрочем, при портировании pre-C++0x-кода на C++0x можно забавно выстрелить себе в ногу, захватив auto_ptr в лямбду по значению, например.
Я совсем зафапался на C++0x, да. Код охуительно сокращается: http://paste.pocoo.org/show/517733/
А вот это оче охуенно. Вместо того, чтобы писать
if (!version.name ().isEmpty ())
html += tr ("Name:") + ' ' + version.name () + "<br />";
if (!version.version ().isEmpty ())
html += tr ("Version:") + ' ' + version.version () + "<br />";
if (!version.os ().isEmpty ())
html += tr ("OS:") + ' ' + version.os () + ... more →
Зато теперь вместо ужасов типа
new FetchQueue (boost::bind (&QXmppVCardManager::requestVCard, &Client_→vCardManager (), _1));
я могу писать что-то типа
new FetchQueue ([this] (const QString& str) { Client_→vCardManager ().requestVCard (str); });
По длине, правда, почти так же :( Плюсы все же ужасно вербозны.
Впилил кеширование кучи ресурсов в азотх. Hit rate охуенен, ведь число хитов растет линейно со временем работы программы, а число miss'ов практически не изменяется. Соответственно, экономится 1-10 обращений в секунду к харду (какие из них попадут в кеш ОС, а какие таки приведут к обращению к харду — другой вопрос). ... more →
Subscribe to *c++
0xd34df00d
Pahom
hirthwork
analizer
ulidtko
werehuman
0x2207
generatorglukoff
4da
magog
dorfe
utros
gelraen
Like-all
jabber
kb
238328
Cthulhu
failman
richmond
Crazy_Owl
beardog
SirAnthony
amd63
hatred
Nico-izo
nobiiru
K900
madInsane
asmer
Minoru
chemikadze
anonymous_owl
astecenko
arts
m4n71k0r
dash
folex
part1zano
Ky6uk
MPogoda
taras
hedgehog
werdn
lexszero
Rejjin
proton
eurekafag
rapture
Enoh
rogaboru
z56371410
mva
zetoke
anoos
DOMr
DJm00n
lHooFool
nexeuse
nstm0
iLeamare
xotetb
Haomand
RainerGomes