Как скрыть частную реализацию (неявное совместное использование) в Qt:Могу ли я использовать QSharedData при наследовании от QObject?
У меня есть Employee.cpp следующее в моем Employee.h заголовке:
#include <QSharedData>
#include <QString>
class EmployeeData;
class Employee: public QObject
{
Q_OBJECT
public:
Employee();
Employee(int id, QString name);
Employee(const Employee &other);
void setId(int id);
void setName(QString name);
int id();
QString name();
private:
QSharedDataPointer<EmployeeData> d;
};
class EmployeeData : public QSharedData
{
public:
EmployeeData() : id(-1) { name.clear(); }
EmployeeData(const EmployeeData &other)
: QSharedData(other), id(other.id), name(other.name) { }
~EmployeeData() { }
int id;
QString name;
};
Но когда я перехожу EmployeeData к закрытой части , скажем Employee.cpp я получаю: ошибка: неправильное использование неполного типа «STRUCT EmployeeData»
Однако, если я изменю свое определение этому он отлично работает:
class Employee
{
public:
Employee();
Employee(int id, QString name);
..
Таким образом, могу ли я использовать QSharedData при наследовании от QObject?
я не видел нигде в 'документации QSharedDataPointer', как вы могли бы хранить ссылку на публичный класс. У вас есть контроль над конструктором копирования, но когда копия сделана, ссылка на родительский объект не передается, поэтому, если класс, к которому теперь привязаны данные, знает, что вызывается 'detach()', это может Не уведомляйте данные о том, что у него новый владелец. Мысли? Предложения? Может быть, вам понадобится подкласс 'QSharedDataPointer' для поддержки такой операции? –
Дарн, я хотел иметь свой торт и съесть его тоже! Моя идея состояла в том, чтобы иметь объект передачи данных (передачи) с 1) сигналами и слотами, 2) pimpl И 3) copy-on-write. Наверное, нет колоколов и свистков и живут с 2 и 3. Или есть предложения по 1 + 2 + 3 с использованием классов Qt? –
Как ваши соединения будут передаваться/копироваться при копировании вашего объекта данных? Зачем вам нужны сигналы/слоты непосредственно в классе данных? –