LINUX.ORG.RU

перегрузка оператора <<

 ,


0

1

допустим есть ф-ция виду:

void DebugPrint(qString _debug)
{
    #ifdef __DEBUG__
    qDebug()<<_debug;
    #endif
}
Как можно чтоб можно было вызывать ф-цию в таком виде:
DebugPrint()<<1<<"text"<<char_var<<bool_var;
а DebugPrint дергала qDebug() в виде:

qDebug<<"debug:"<<1 <<"text"<<char_var<<bool_var;

★★★★

Ответ на: комментарий от ymuv

что-то типа такого.

#include <cstdio>
#include <string>

class AA
{
	public:
		AA &operator ()() {return *this;}
		AA &operator << (const char *s) {puts(s); return *this;}
		AA &operator << (std::string s) {puts(s.c_str()); return *this;}
};

int main()
{
	std::string s("vasja");
	AA() << "hello" << s;
}

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

или так. только я это не компилировал.

class AA
{
	public:
		AA(): d() {}
		AA &operator ()() {return *this;}
		AA &operator << (const char *s) {d << s; return *this;}
		AA &operator << (std::string s) {d << s; return *this;}
	private:
		QDebug d;
};

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

При этом еще можно:

class MyType {
     // доступ к закрытым членам MyType
     friend QDebug& operator <<(QDebug &debug, const MyType &t);
};

QDebug& operator <<(QDebug &debug, const MyType &t) { /* ... */ }

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

А вы разве не QT_NO_DEBUG_OUTPUT ищете?

да, его, спс.

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

еще вопрос. А как можно все аргументы передать за раз, а не по одному? то-есть если я напишу:

my_class<<1<<"a";
в процессе будет сделано так:
qDebug()<<1;
qDebug()<<"a";
Как вариант сохранять все объекты где-то, а при последнем аргументе просто выводить их, но как узнать последний ли это объект?

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

но как узнать последний ли это объект?

Можно сделать что-то из разряда

{
  QDebug d = qDebug();
  d << 1;
  d << "a";   
}

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

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

В Qt qDebug() выводит строку, только при вызове своего деструктора. Можно сделать также.

Kosyak ★★★★ ()

DebugPrint()<<1;

Предлагаю поизучать С++, для начала

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