Russian Qt Forum

Программирование => С/C++ => Тема начата: Flakes от Март 22, 2008, 16:28



Название: Метод безымянного объекта
Отправлено: Flakes от Март 22, 2008, 16:28
Думаю это самый подходящий раздел для вопроса.

Я хотел бы не объявляя явно объект (вроде такие называются безымянными) добраться до его свойств через метод и изменить их. Или другими словами создав безымянный объект сразу выполнить его метод. Есть кусок:

Код:
QTextEdit Notes;
...
QFont font;
font.setBold(true);
Notes->setCurrentFont(font);

хотелось бы его сократить например до
Код:
...
Notes->setCurrentFont(QFont().setBold(true));

или сделать так:
Код:
QFont * font = new QFont().setBold(true);

но проблема в том что метод void QFont::setBold ( bool enable ) возвращает void, и в первом варианте на это ругается.

В Java это делается без проблем... и так и выглядело бы
Код:
new QFont().setBold(true); 

может каким то образом можно впихнуть setBold() в параметр конструктора?


Название: Re: Метод безымянного объекта
Отправлено: vregess от Март 22, 2008, 21:09
Хотелось бы поинтересоваться, зачем это надо.


Название: Re: Метод безымянного объекта
Отправлено: Flakes от Март 23, 2008, 02:49
просто у меня страсть к минимализму...


Название: Re: Метод безымянного объекта
Отправлено: vregess от Март 23, 2008, 10:12
ну можешь сделать обертку для интересующего класса, которая будет выполнять нужную инициализацию или там макрос придумать...

ИМХО в контексте с++ запись вида
Код:
QTextEdit Notes;
...
QFont font;
font.setBold(true);
Notes->setCurrentFont(font);

как раз и будет считаться "минимализмом".

А код вида
Код:
Notes->setCurrentFont(QFont().setBold(true));
лишь нагромождением.

Первый пример читать удобнее.

используй asm, если уж такая тяга к минимализму)

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


Название: Re: Метод безымянного объекта
Отправлено: Tonal от Март 24, 2008, 08:17
Код:
inline QFint setBold(QFont fnt, bool isBold) {
  fnt.setBold(isBold);
  return fnt;
}
...
  Notes->setCurrentFont(setBold(QFont(), true));
...


Название: Re: Метод безымянного объекта
Отправлено: Flakes от Март 24, 2008, 11:52
Код:
inline QFint setBold(QFont fnt, bool isBold) {
  fnt.setBold(isBold);
  return fnt;
}
...
  Notes->setCurrentFont(setBold(QFont(), true));
...

это конечно вариант, но немного утрированный. Все равно спасибо всем!