LINUX.ORG.RU
ФорумTalks

[спецамповсему][кутерастам]С++\Qt Forward Declarations o.O


0

0

Собсна вот:

http://techbase.kde.org/Development/Tutorials/Common_Programming_Mistakes#Forward_Declarations

Для Ъ

For example: 
#include <QWidget>     // slow
#include <QStringList> // slow
#include <QString>     // slow
class SomeInterface
{
public:
    virtual void widgetAction( QWidget *widget ) =0;
    virtual void stringAction( const QString& str ) =0;
    virtual void stringListAction( const QStringList& strList ) =0;
};

The above should instead be written like this: 
class QWidget;     // fast
class QStringList; // fast
class QString;     // fast
class SomeInterface
{
public:
    virtual void widgetAction( QWidget *widget ) =0;
    virtual void stringAction( const QString& str ) =0;
    virtual void stringListAction( const QStringList& strList ) =0;
};

не пойму, откуда во втором _правильном_ примере, компилятор найдет хидеры описанных класов? Или там забыли #include <QtGui>?

У тебя чисто виртуальный класс, а значит ты будешь от него наследовать, и при наследовании включишь нужные инклуды. Вот тогда компилятор их и подцепит. FD как бы говорит компилятору, что девочки будут попозже.

MuZHiK-2 ★★★★ ()
Ответ на: комментарий от overmind88

>>хех, в вопросе о qt отвечают гномосеки :)

Дык вопрос вообще к куте на самом деле не относится. Форвард декларация стандартная хрень. Что показательно, для кутебыдлокодеров даже специально пишут в мануале.

MuZHiK-2 ★★★★ ()
Ответ на: комментарий от overmind88

> хех, в вопросе о qt отвечают гномосеки :)

этот вопрос абсолютно не про Qt. Совершеннейше. Qt тут вообще не существует.

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

>>Херню ты сказал. Виртуальность не имеет никакого отношения к forward declaration.

Я то я не знал? В данном примере на пальцах так было объяснить проще, хороший пример для использования FD.

MuZHiK-2 ★★★★ ()

«#include <QtGui>» будет в cpp-файле.

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

В каком месте, дибила кусок, я сказал херню? В данном конкретном случае все было по делу. Так и признайся, что я запутал тебя, когда ты кинулся гуглить после прочтения сабжа.

MuZHiK-2 ★★★★ ()

При использоание указателей и ссылок описание класса не требуется

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

> Их будет не компилятор искать, а линкер. Хидеры тут не нужны в самом деле, так как нет доступа к полям классов.

Линкер не занимается проблемой приведеняи типов

namezys ★★★★ ()
Ответ на: комментарий от MuZHiK-2

> Форвард декларация стандартная хрень.

Вы похоже не знаете, что это такое

namezys ★★★★ ()
Ответ на: комментарий от MuZHiK-2

для тупых еще раз — виртуальность к forward declaration не имеет никакого вообще отношения.

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