From qtnode
#include <QxtPimpl.h>
#include <iostream>
class MyTestPrivate;
class MyTest {
public:
MyTest();
void doSomething();
int x;
private:
QXT_DECLARE_PRIVATE(MyTest);
};
class MyTestPrivate : public QxtPrivate<MyTest> {
public:
MyTestPrivate(); // private classes must be default-constructible
QXT_DECLARE_PUBLIC(MyTest);
void doSomething();
};
MyTest::MyTest() {
std::cout << "Public class init" << std::endl;
x = 5;
QXT_INIT_PRIVATE(MyTest);
}
void MyTest::doSomething() {
qxt_d().doSomething();
}
MyTestPrivate::MyTestPrivate() : QxtPrivate<MyTest>() {
std::cout << "Private class init" << std::endl;
}
void MyTestPrivate::doSomething() {
std::cout << "Something! x=" << qxt_p().x << std::endl;
}
class SubTestPrivate;
class SubTest : public MyTest {
public:
SubTest();
void doSomethingElse();
int y;
private:
QXT_DECLARE_PRIVATE(SubTest);
};
class SubTestPrivate : public QxtPrivate<SubTest> {
public:
SubTestPrivate();
QXT_DECLARE_PUBLIC(MyTest);
void doSomething();
};
SubTest::SubTest() : MyTest() {
std::cout << "Subclass init" << std::endl;
y = 3;
QXT_INIT_PRIVATE(SubTest);
}
void SubTest::doSomethingElse() {
qxt_d().doSomething();
}
SubTestPrivate::SubTestPrivate() : QxtPrivate<SubTest>() {
std::cout << "Private subclass init" << std::endl;
}
void SubTestPrivate::doSomething() {
std::cout << "Something else! y=" << qxt_p().y << std::endl;
}
int main(int argc, char** argv) {
SubTest x;
x.doSomething();
x.doSomethingElse();
}