Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
d_ptr. Или нет? Вся работа происходит исключительно через класс-обёртку? Но если так, то… Эмс. А чем это лучше чем просто некий стандартный интерфейсный набор функций, и различные реализации их в том же ELF Shared Object? Ну, или dll'ки? Где тут 'фишка'?foo.h
class FooPrivate;
class Foo
{
public:
int somePublic();
Foo();
private:
//FooPrivate *m_foo_private; вариант по старинке
QScopedPointer<FooPrivate> m_foo_private; //но лучше теперь делать так
}
foo.cpp
class FooPrivate
{
int someMethod ()
{
return 1;
};
}
Foo::Foo() : m_foo_private(new FooPrivate)
{
}
int Foo::somePublicMethod()
{
return m_foo_private->someMethod();
}
* This source code was highlighted with Source Code Highlighter.
Смысл в том что объявляется класс XXXPrivate и переменная публичного класса в защищенной секции. В отдельном заголовочном файле или в .cpp файле уже пишется объявление приватного класса
Это необходимо для того чтобы обеспечить возможность создания наследников приватного класса и использования их как приватных классов во всей иерархии
MyClass::MyClass(QObject* parent)
:QObject(parent)
,d_ptr(NULL)
{
d_ptr = new MyClassPrivate(this);
.......
}
С соответствующим конструктором MyClassPrivate.MyClass::MyClass(QObject* parent)
: QObject(parent), d_ptr(new MyClassPrivate(this))
{ ... }
...
MyClassPrivate::MyClassPrivate(MyClass* parent)
: q_ptr(parent)
{ ... } Q_D(MyClass);
d->q_ptr = this;
MyClassDerived::MyClassDerived(QObject *parent)
:MyClass(*new MyClassDerivedPrivate(), parent)
MyClassDerived::MyClassDerived(QObject *parent)
:MyClass(*new MyClassDerivedPrivate(this), parent)
Что такое Pimpl по версии Qt, и с чем его едят!