我有一个类,它有一些我想对调用者隐藏的数据成员(因为包括它们类型的 header 会显着增加编译时间,并且需要每个使用此类的项目添加一个额外的路径到它们的包含路径)。
这个类使用QSharedDataPointer
来存储这些数据。这样就可以使用默认的复制构造函数进行复制。
这个类的基本结构是:
class MyClass {
private:
QSharedDataPointer<MySharedClassData> m_data;
};
在定义MySharedClassData
的情况下,有什么花哨的技巧可以做到这一点吗? (继承自 QSharedData
)在同一个头文件中?或者还有其他隐藏数据字段的好方法吗?
我已经尝试过 MySharedClassData
的前向声明但这没有用(尽管 m_data
是 private
)。
目前我能想到的唯一解决方案是声明 m_data
作为QSharedDataPointer<QSharedData>
但是每次我想访问它时我都需要转换数据成员。有更好的解决方案吗?
最佳答案
只要您的构造函数和析构函数未在 header 中定义,前向声明就应该起作用。以下类在我的计算机上编译:
#ifndef MAIN_WINDOW_HXX
#define MAIN_WINDOW_HXX
#include <QMainWindow>
#include <ui_MainWindow.h>
#include <QSharedDataPointer>
class MySharedClassData;
class MainWindow : public QMainWindow, private Ui_MainWindow {
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0, Qt::WindowFlags flags = 0);
virtual ~MainWindow();
QSharedDataPointer<MySharedClassData> m_data;
};
#endif
如果您尝试内联您的构造函数/析构函数,那么您可能会收到:C2027: use of undefined type 'type'
under VS。
关于c++ - 私有(private)(隐藏)QSharedData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9176191/